class REXML::Attribute
Defines an Element Attribute; IE, a attribute=value pair, as in: <element attribute=“value”/>. Attributes can be in their own namespaces. General users of REXML will not interact with the Attribute class much.
Constants
- NEEDS_A_SECOND_CHECK
- PATTERN
Attributes
The element to which this attribute belongs
Public Class Methods
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 42 def initialize( first, second=nil, parent=nil ) @normalized = @unnormalized = @element = nil if first.kind_of? Attribute self.name = first.expanded_name @unnormalized = first.value if second.kind_of? Element @element = second else @element = first.element end elsif first.kind_of? String @element = parent self.name = first @normalized = second.to_s else raise "illegal argument #{first.class.name} to Attribute constructor" end end
Constructor. FIXME: The parser doesn’t catch illegal characters in attributes
- first
-
Either: an
Attribute, which this new attribute will become a clone of; or aString, which is the name of this attribute - second
-
If
firstis anAttribute, then this may be anElement, or nil. If nil, then theElementparent of this attribute is the parent of thefirstAttribute. If the first argument is aString, then this must also be aString, and is the content of the attribute. If this is the content, it must be fully normalized (contain no illegal characters). - parent
-
Ignored unless
firstis aString; otherwise, may be theElementparent of this attribute, or nil.
Attribute.new( attribute_to_clone ) Attribute.new( attribute_to_clone, parent_element ) Attribute.new( "attr", "attr_value" ) Attribute.new( "attr", "attr_value", parent_element )
Public Instance Methods
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 106 def ==( other ) other.kind_of?(Attribute) and other.name==name and other.value==value end
Returns true if other is an Attribute and has the same name and value, false otherwise.
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 161 def clone Attribute.new self end
Returns a copy of this attribute
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 132 def doctype @element&.document&.doctype end
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 205 def document @element&.document end
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 169 def element=( element ) @element = element if @normalized Text.check( @normalized, NEEDS_A_SECOND_CHECK ) end self end
Sets the element of which this object is an attribute. Normally, this is not directly called.
Returns this attribute
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 111 def hash name.hash + value.hash end
Creates (and returns) a hash from both the name and value
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 195 def inspect rv = +"" write( rv ) rv end
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 95 def namespace arg=nil arg = prefix if arg.nil? if arg == "" "" else @element.namespace(arg) end end
Returns the namespace URL, if defined, or nil otherwise
e = Element.new("el") e.add_namespace("ns", "http://url") e.add_attribute("ns:a", "b") e.add_attribute("nsx:a", "c") e.attribute("ns:a").namespace # => "http://url" e.attribute("nsx:a").namespace # => nil
This method always returns “” for no namespace attribute. Because the default namespace doesn’t apply to attribute names.
From www.w3.org/TR/xml-names/#uniqAttrs
> the default namespace does not apply to attribute names
e = REXML::Element.new("el") e.add_namespace("", "http://example.com/") e.namespace # => "http://example.com/" e.add_attribute("a", "b") e.attribute("a").namespace # => ""
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 191 def node_type :attribute end
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 155 def normalized=(new_normalized) @normalized = new_normalized @unnormalized = nil end
The normalized value of this attribute. That is, the attribute with entities intact.
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 70 def prefix super end
Returns the namespace of the attribute.
e = Element.new( "elns:myelement" ) e.add_attribute( "nsa:a", "aval" ) e.add_attribute( "b", "bval" ) e.attributes.get_attribute( "a" ).prefix # -> "nsa" e.attributes.get_attribute( "b" ).prefix # -> "" a = Attribute.new( "x", "y" ) a.prefix # -> ""
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 182 def remove @element.attributes.delete self.name unless @element.nil? end
Removes this Attribute from the tree, and returns true if successful
This method is usually not called directly.
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 137 def to_s return @normalized if @normalized @normalized = Text::normalize( @unnormalized, doctype ) @normalized end
Returns the attribute value, with entities replaced
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 121 def to_string value = to_s if @element and @element.context and @element.context[:attribute_quote] == :quote value = value.gsub('"', '"') if value.include?('"') %Q^#@expanded_name="#{value}"^ else value = value.gsub("'", ''') if value.include?("'") "#@expanded_name='#{value}'" end end
Returns this attribute out as XML source, expanding the name
a = Attribute.new( "x", "y" ) a.to_string # -> "x='y'" b = Attribute.new( "ns:x", "y" ) b.to_string # -> "ns:x='y'"
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 146 def value return @unnormalized if @unnormalized @unnormalized = Text::unnormalize(@normalized, doctype, entity_expansion_text_limit: @element&.document&.entity_expansion_text_limit) end
Returns the UNNORMALIZED value of this attribute. That is, entities have been expanded to their values
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 187 def write( output, indent=-1 ) output << to_string end
Writes this attribute (EG, puts ‘key=“value”’ to the output)
Source
# File bundled-src/rexml-3.4.4/lib/rexml/attribute.rb, line 201 def xpath @element.xpath + "/@#{self.expanded_name}" end