In: |
rexml/attribute.rb
|
Parent: | Object |
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.
PATTERN | = | /\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\2/um |
element | [R] | The element to which this attribute belongs |
normalized | [W] | The normalized value of this attribute. That is, the attribute with entities intact. |
Constructor.
Attribute.new( attribute_to_clone ) Attribute.new( source ) Attribute.new( "attr", "attr_value" ) Attribute.new( "attr", "attr_value", parent_element )
# File rexml/attribute.rb, line 26 def initialize( first, second=nil, parent=nil ) @normalized = @unnormalized = @element = nil if first.kind_of? Attribute self.name = first.expanded_name @value = first.value if second.kind_of? Element @element = second else @element = first.element end elsif first.kind_of? String @element = parent if parent.kind_of? Element self.name = first @value = second.to_s else raise "illegal argument #{first.class.name} to Attribute constructor" end end
Returns a copy of this attribute
# File rexml/attribute.rb, line 121 def clone Attribute.new self end
Sets the element of which this object is an attribute. Normally, this is not directly called.
Returns this attribute
# File rexml/attribute.rb, line 129 def element=( element ) @element = element self end
Creates (and returns) a hash from both the name and value
# File rexml/attribute.rb, line 79 def hash name.hash + value.hash end
Returns the namespace URL, if defined, or nil otherwise
e = Element.new("el") e.add_attributes({"xmlns:ns", "http://url"}) e.namespace( "ns" ) # -> "http://url"
# File rexml/attribute.rb, line 67 def namespace arg=nil arg = prefix if arg.nil? @element.namespace arg 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 rexml/attribute.rb, line 54 def prefix pf = super if pf == "" pf = @element.prefix if @element end pf end
Returns the attribute value, with entities replaced
# File rexml/attribute.rb, line 94 def to_s return @normalized if @normalized doctype = nil if @element doc = @element.document doctype = doc.doctype if doc end @unnormalized = nil @value = @normalized = Text::normalize( @value, doctype ) 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 rexml/attribute.rb, line 89 def to_string "#@expanded_name='#{to_s().gsub(/'/, ''')}'" end
Returns the UNNORMALIZED value of this attribute. That is, entities have been expanded to their values
# File rexml/attribute.rb, line 109 def value @unnormalized if @unnormalized doctype = nil if @element doc = @element.document doctype = doc.doctype if doc end @normalized = nil @value = @unnormalized = Text::unnormalize( @value, doctype ) end