Class: REXML::Attribute
- Defined in:
- lib/rexml/attribute.rb
Overview
Defines an Element Attribute; IE, a attribute=value pair, as in:
Constant Summary collapse
- PATTERN =
/\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\2/um
Constants included from Namespace
Constants included from XMLTokens
XMLTokens::NAME, XMLTokens::NAMECHAR, XMLTokens::NAME_STR, XMLTokens::NCNAME_STR, XMLTokens::NMTOKEN, XMLTokens::NMTOKENS, XMLTokens::REFERENCE
Instance Attribute Summary collapse
-
#element ⇒ Object
The element to which this attribute belongs.
-
#normalized ⇒ Object
writeonly
The normalized value of this attribute.
Attributes included from Namespace
Instance Method Summary collapse
-
#==(other) ⇒ Object
Returns true if other is an Attribute and has the same name and value, false otherwise.
-
#clone ⇒ Object
Returns a copy of this attribute.
-
#hash ⇒ Object
Creates (and returns) a hash from both the name and value.
-
#initialize(first, second = nil, parent = nil) ⇒ Attribute
constructor
Constructor.
- #inspect ⇒ Object
-
#namespace(arg = nil) ⇒ Object
Returns the namespace URL, if defined, or nil otherwise.
- #node_type ⇒ Object
-
#prefix ⇒ Object
Returns the namespace of the attribute.
-
#remove ⇒ Object
Removes this Attribute from the tree, and returns true if successfull.
-
#to_s ⇒ Object
Returns the attribute value, with entities replaced.
-
#to_string ⇒ Object
Returns this attribute out as XML source, expanding the name.
-
#value ⇒ Object
Returns the UNNORMALIZED value of this attribute.
-
#write(output, indent = -1 )) ⇒ Object
Writes this attribute (EG, puts 'key="value"' to the output).
- #xpath ⇒ Object
Methods included from Namespace
#fully_expanded_name, #has_name?
Methods included from Node
#each_recursive, #find_first_recursive, #indent, #index_in_parent, #next_sibling_node, #parent?, #previous_sibling_node
Constructor Details
#initialize(first, second = nil, parent = nil) ⇒ Attribute
Constructor.
Attribute.new( attribute_to_clone ) Attribute.new( source ) Attribute.new( "attr", "attr_value" ) Attribute.new( "attr", "attr_value", parent_element )
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/rexml/attribute.rb', line 26 def initialize( first, second=nil, parent=nil ) @normalized = @unnormalized = @element = nil if first.kind_of? Attribute self.name = first. @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 |
Instance Attribute Details
#element ⇒ Object
The element to which this attribute belongs
14 15 16 |
# File 'lib/rexml/attribute.rb', line 14 def element @element end |
#normalized=(value) ⇒ Object (writeonly)
The normalized value of this attribute. That is, the attribute with entities intact.
17 18 19 |
# File 'lib/rexml/attribute.rb', line 17 def normalized=(value) @normalized = value end |
Instance Method Details
#==(other) ⇒ Object
Returns true if other is an Attribute and has the same name and value, false otherwise.
74 75 76 |
# File 'lib/rexml/attribute.rb', line 74 def ==( other ) other.kind_of?(Attribute) and other.name==name and other.value==@value end |
#clone ⇒ Object
Returns a copy of this attribute
121 122 123 |
# File 'lib/rexml/attribute.rb', line 121 def clone Attribute.new self end |
#hash ⇒ Object
Creates (and returns) a hash from both the name and value
79 80 81 |
# File 'lib/rexml/attribute.rb', line 79 def hash name.hash + value.hash end |
#inspect ⇒ Object
150 151 152 153 154 |
# File 'lib/rexml/attribute.rb', line 150 def inspect rv = "" write( rv ) rv end |
#namespace(arg = nil) ⇒ Object
Returns the namespace URL, if defined, or nil otherwise
e = Element.new("el") e.add_attributes("http://url") e.namespace( "ns" ) # -> "http://url"
67 68 69 70 |
# File 'lib/rexml/attribute.rb', line 67 def namespace arg=nil arg = prefix if arg.nil? @element.namespace arg end |
#node_type ⇒ Object
146 147 148 |
# File 'lib/rexml/attribute.rb', line 146 def node_type :attribute end |
#prefix ⇒ Object
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 # -> ""
54 55 56 57 58 59 60 |
# File 'lib/rexml/attribute.rb', line 54 def prefix pf = super if pf == "" pf = @element.prefix if @element end pf end |
#remove ⇒ Object
Removes this Attribute from the tree, and returns true if successfull
This method is usually not called directly.
137 138 139 |
# File 'lib/rexml/attribute.rb', line 137 def remove @element.attributes.delete self.name unless @element.nil? end |
#to_s ⇒ Object
Returns the attribute value, with entities replaced
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/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 @normalized = Text::normalize( @value, doctype ) end |
#to_string ⇒ Object
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'"
89 90 91 |
# File 'lib/rexml/attribute.rb', line 89 def to_string "#@expanded_name='#{to_s().gsub(/'/, ''')}'" end |
#value ⇒ Object
Returns the UNNORMALIZED value of this attribute. That is, entities have been expanded to their values
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/rexml/attribute.rb', line 109 def value return @unnormalized if @unnormalized doctype = nil if @element doc = @element.document doctype = doc.doctype if doc end @normalized = nil @unnormalized = Text::unnormalize( @value, doctype ) end |
#write(output, indent = -1 )) ⇒ Object
Writes this attribute (EG, puts 'key="value"' to the output)
142 143 144 |
# File 'lib/rexml/attribute.rb', line 142 def write( output, indent=-1 ) output << to_string end |
#xpath ⇒ Object
156 157 158 159 160 |
# File 'lib/rexml/attribute.rb', line 156 def xpath path = @element.xpath path += "/@#{self.}" return path end |