Class: REXML::Attribute
- Defined in:
- lib/extensions/rexml/rexml/attribute.rb,
lib/extensions/rhoxml/rexml/attribute.rb
Overview
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.
Constant Summary collapse
- PATTERN =
/\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\2/um
- NEEDS_A_SECOND_CHECK =
/(<|&((#{Entity::NAME});|(#0*((?:\d+)|(?:x[a-fA-F0-9]+)));)?)/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.
- #doctype ⇒ Object
-
#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. FIXME: The parser doesn’t catch illegal characters in attributes
- first
-
Either: an Attribute, which this new attribute will become a clone of; or a String, which is the name of this attribute
- second
-
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 thefirst
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).
- parent
-
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 )
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 44 def initialize( first, second=nil, parent=nil ) @normalized = @unnormalized = @element = nil if first.kind_of? Attribute self.name = first. @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 |
Instance Attribute Details
#element ⇒ Object
The element to which this attribute belongs
14 15 16 |
# File 'lib/extensions/rexml/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/extensions/rexml/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.
92 93 94 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 92 def ==( other ) other.kind_of?(Attribute) and other.name==name and other.value==value end |
#clone ⇒ Object
Returns a copy of this attribute
141 142 143 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 141 def clone Attribute.new self end |
#doctype ⇒ Object
115 116 117 118 119 120 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 115 def doctype if @element doc = @element.document doctype = doc.doctype if doc end end |
#hash ⇒ Object
Creates (and returns) a hash from both the name and value
97 98 99 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 97 def hash name.hash + value.hash end |
#inspect ⇒ Object
175 176 177 178 179 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 175 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({"xmlns:ns", "http://url"})
e.namespace( "ns" ) # -> "http://url"
85 86 87 88 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 85 def namespace arg=nil arg = prefix if arg.nil? @element.namespace arg end |
#node_type ⇒ Object
171 172 173 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 171 def node_type :attribute end |
#prefix ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 72 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.
162 163 164 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 162 def remove @element.attributes.delete self.name unless @element.nil? end |
#to_s ⇒ Object
Returns the attribute value, with entities replaced
123 124 125 126 127 128 129 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 123 def to_s return @normalized if @normalized @normalized = Text::normalize( @unnormalized, doctype ) @unnormalized = nil @normalized end |
#to_string ⇒ Object
107 108 109 110 111 112 113 |
# File 'lib/extensions/rexml/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 |
#value ⇒ Object
Returns the UNNORMALIZED value of this attribute. That is, entities have been expanded to their values
133 134 135 136 137 138 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 133 def value return @unnormalized if @unnormalized @unnormalized = Text::unnormalize( @normalized, doctype ) @normalized = nil @unnormalized end |
#write(output, indent = -1 )) ⇒ Object
Writes this attribute (EG, puts ‘key=“value”’ to the output)
167 168 169 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 167 def write( output, indent=-1 ) output << to_string end |
#xpath ⇒ Object
181 182 183 184 185 |
# File 'lib/extensions/rexml/rexml/attribute.rb', line 181 def xpath path = @element.xpath path += "/@#{self.}" return path end |