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
The normalized value of this attribute. That is, the attribute with entities intact.
Public Class Methods
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 )
# File lib/rexml/attribute.rb, line 45 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
Public Instance Methods
Returns true if other is an Attribute and has the same name and value, false otherwise.
# File lib/rexml/attribute.rb, line 96 def ==( other ) other.kind_of?(Attribute) and other.name==name and other.value==value end
Returns a copy of this attribute
# File lib/rexml/attribute.rb, line 145 def clone Attribute.new self end
# File lib/rexml/attribute.rb, line 119 def doctype if @element doc = @element.document doc.doctype if doc end end
Sets the element of which this object is an attribute. Normally, this is not directly called.
Returns this attribute
# File lib/rexml/attribute.rb, line 153 def element=( element ) @element = element if @normalized Text.check( @normalized, NEEDS_A_SECOND_CHECK, doctype ) end self end
Creates (and returns) a hash from both the name and value
# File lib/rexml/attribute.rb, line 101 def hash name.hash + value.hash end
# File lib/rexml/attribute.rb, line 179 def inspect rv = "" write( rv ) rv 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
# File lib/rexml/attribute.rb, line 89 def namespace arg=nil arg = prefix if arg.nil? @element.namespace arg end
# File lib/rexml/attribute.rb, line 175 def node_type :attribute 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 # -> "elns" a = Attribute.new( "x", "y" ) a.prefix # -> ""
# File lib/rexml/attribute.rb, line 73 def prefix pf = super if pf == "" pf = @element.prefix if @element end pf end
Removes this Attribute from the tree, and returns true if successful
This method is usually not called directly.
# File lib/rexml/attribute.rb, line 166 def remove @element.attributes.delete self.name unless @element.nil? end
Returns the attribute value, with entities replaced
# File lib/rexml/attribute.rb, line 127 def to_s return @normalized if @normalized @normalized = Text::normalize( @unnormalized, doctype ) @unnormalized = nil @normalized 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'"
# File lib/rexml/attribute.rb, line 111 def to_string if @element and @element.context and @element.context[:attribute_quote] == :quote %Q^#@expanded_name="#{to_s().gsub(/"/, '"')}"^ else "#@expanded_name='#{to_s().gsub(/'/, ''')}'" end end
Returns the UNNORMALIZED value of this attribute. That is, entities have been expanded to their values
# File lib/rexml/attribute.rb, line 137 def value return @unnormalized if @unnormalized @unnormalized = Text::unnormalize( @normalized, doctype ) @normalized = nil @unnormalized end
Writes this attribute (EG, puts 'key=“value”' to the output)
# File lib/rexml/attribute.rb, line 171 def write( output, indent=-1 ) output << to_string end
# File lib/rexml/attribute.rb, line 185 def xpath path = @element.xpath path += "/@#{self.expanded_name}" return path end