Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more

In Files

  • rexml/attribute.rb

Class/Module Index [+]



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.



The element to which this attribute belongs


The normalized value of this attribute. That is, the attribute with entities intact.

Public Class Methods

new( first, second=nil, parent=nil ) click to toggle source

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
      @element = first.element
  elsif first.kind_of? String
    @element = parent
    self.name = first
    @normalized = second.to_s
    raise "illegal argument #{first.class.name} to Attribute constructor"

Public Instance Methods

==( other ) click to toggle source

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
clone() click to toggle source

Returns a copy of this attribute

               # File rexml/attribute.rb, line 141
def clone
  Attribute.new self
doctype() click to toggle source
               # File rexml/attribute.rb, line 115
def doctype
  if @element
    doc = @element.document
    doctype = doc.doctype if doc
element=( element ) click to toggle source

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 )

hash() click to toggle source

Creates (and returns) a hash from both the name and value

               # File rexml/attribute.rb, line 97
def hash
  name.hash + value.hash
inspect() click to toggle source
               # File rexml/attribute.rb, line 175
def inspect
  rv = ""
  write( rv )
namespace(arg=nil) click to toggle source

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
node_type() click to toggle source
               # File rexml/attribute.rb, line 171
def node_type
prefix() click to toggle source

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
remove() click to toggle source

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?
to_s() click to toggle source

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
to_string() click to toggle source

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(/"/, '&quote;')}"^
    "#@expanded_name='#{to_s().gsub(/'/, '&apos;')}'"
value() click to toggle source

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
write( output, indent=-1 ) click to toggle source

Writes this attribute (EG, puts ‘key=“value”’ to the output)

               # File rexml/attribute.rb, line 167
def write( output, indent=-1 )
  output << to_string
xpath() click to toggle source
               # File rexml/attribute.rb, line 181
def xpath
  path = @element.xpath
  path += "/@#{self.expanded_name}"
  return path

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.