Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
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.
Constructor. FIXME: The parser doesn’t catch illegal characters in attributes
Either: an Attribute, which this new attribute will become a clone of; or a String, which is the name of this attribute
If first
is an Attribute, then
this may be an Element, or nil. If nil, then the
Element parent of this attribute is the parent
of the first
Attribute. If the
first argument is a String, then this must also be a String, and is the
content of the attribute. If this is the content, it must be fully
normalized (contain no illegal characters).
Ignored unless first
is a String; otherwise, may be the Element parent 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 rexml/attribute.rb, line 44 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
Returns true if other is an Attribute and has the same name and value, false otherwise.
# File rexml/attribute.rb, line 92 def ==( other ) other.kind_of?(Attribute) and other.name==name and other.value==value end
Returns a copy of this attribute
# File rexml/attribute.rb, line 141 def clone Attribute.new self end
# File rexml/attribute.rb, line 115 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 rexml/attribute.rb, line 149 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 rexml/attribute.rb, line 97 def hash name.hash + value.hash end
# File rexml/attribute.rb, line 175 def inspect rv = "" write( rv ) rv 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 85 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 72 def prefix pf = super if pf == "" pf = @element.prefix if @element end pf end
Removes this Attribute from the tree, and returns true if successfull
This method is usually not called directly.
# File rexml/attribute.rb, line 162 def remove @element.attributes.delete self.name unless @element.nil? end
Returns the attribute value, with entities replaced
# File rexml/attribute.rb, line 123 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 rexml/attribute.rb, line 107 def to_string if @element and @element.context and @element.context[:attribute_quote] == :quote %Q^#@expanded_name="#{to_s().gsub(/"/, '"e;')}"^ 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 rexml/attribute.rb, line 133 def value return @unnormalized if @unnormalized @unnormalized = Text::unnormalize( @normalized, doctype ) @normalized = nil @unnormalized end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.