Class: REXML::Attribute
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Instance Chain:
|
|
| Inherits: | Object |
| Defined in: | lib/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
-
NEEDS_A_SECOND_CHECK =
# File 'lib/rexml/attribute.rb', line 21/(<|&((#{Entity::NAME});|(#0*((?:\d)|(?:x[a-fA-F0-9])));)?)/um -
PATTERN =
# File 'lib/rexml/attribute.rb', line 19/\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\2/um
XMLTokens - Included
NAME, NAMECHAR, NAME_CHAR, NAME_START_CHAR, NAME_STR, NCNAME_STR, NMTOKEN, NMTOKENS, REFERENCE
Namespace - Included
Class Method Summary
-
.new(first, second = nil, parent = nil) ⇒ Attribute
constructor
Constructor.
Instance Attribute Summary
-
#element
rw
The element to which this attribute belongs.
-
#element=(element)
rw
Sets the element of which this object is an attribute.
-
#normalized=(value)
writeonly
The normalized value of this attribute.
Namespace - Included
| #expanded_name | The name of the object, valid if set. |
| #local_name | Alias for Namespace#name. |
| #name | The name of the object, valid if set. |
| #name= | Sets the name and the expanded name. |
| #prefix | The expanded name of the object, valid if name is set. |
Node - Included
Instance Method Summary
-
#==(other)
Returns true if other is an
Attributeand has the same name and value, false otherwise. -
#clone
Returns a copy of this attribute.
- #doctype
-
#hash
Creates (and returns) a hash from both the name and value.
- #inspect
-
#namespace(arg = nil)
Returns the namespace URL, if defined, or nil otherwise.
- #node_type
-
#prefix
Returns the namespace of the attribute.
-
#remove
Removes this
Attributefrom the tree, and returns true if successful. -
#to_s
Returns the attribute value, with entities replaced.
-
#to_string
Returns this attribute out as XML source, expanding the name.
-
#value
Returns the UNNORMALIZED value of this attribute.
-
#write(output, indent = -1 ))
Writes this attribute (EG, puts 'key=“value”' to the output).
- #xpath
Namespace - Included
| #fully_expanded_name | Fully expand the name, even if the prefix wasn't specified in the source file. |
| #has_name? | Compares names optionally WITH namespaces. |
Node - Included
| #each_recursive | Visit all subnodes of |
| #find_first_recursive | Find (and return) first subnode (recursively) for which the block evaluates to true. |
| #indent, | |
| #index_in_parent | Returns the position that |
| #next_sibling_node, #previous_sibling_node, | |
| #to_s |
|
Constructor Details
.new(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
firstis an Attribute, then this may be an Element, or nil. If nil, then the Element parent of this attribute is the parent of thefirstAttribute. 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
firstis 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 'lib/rexml/attribute.rb', line 45
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 (rw)
The element to which this attribute belongs
# File 'lib/rexml/attribute.rb', line 15
attr_reader :element
#element=(element) (rw)
Sets the element of which this object is an attribute. Normally, this is not directly called.
Returns this attribute
#normalized=(value) (writeonly)
The normalized value of this attribute. That is, the attribute with entities intact.
# File 'lib/rexml/attribute.rb', line 18
attr_writer :normalized
Instance Method Details
#==(other)
Returns true if other is an Attribute and has the same name and value, false otherwise.
#clone
Returns a copy of this attribute
# File 'lib/rexml/attribute.rb', line 145
def clone Attribute.new self end
#doctype
[ GitHub ]# File 'lib/rexml/attribute.rb', line 119
def doctype if @element doc = @element.document doc.doctype if doc end end
#hash
Creates (and returns) a hash from both the name and value
# File 'lib/rexml/attribute.rb', line 101
def hash name.hash + value.hash end
#inspect
[ GitHub ]# File 'lib/rexml/attribute.rb', line 179
def inspect rv = "" write( rv ) rv end
#namespace(arg = nil)
# File 'lib/rexml/attribute.rb', line 89
def namespace arg=nil arg = prefix if arg.nil? @element.namespace arg end
#node_type
[ GitHub ]# File 'lib/rexml/attribute.rb', line 175
def node_type :attribute end
#prefix
# File 'lib/rexml/attribute.rb', line 73
def prefix pf = super if pf == "" pf = @element.prefix if @element end pf end
#remove
Removes this Attribute from the tree, and returns true if successful
This method is usually not called directly.
# File 'lib/rexml/attribute.rb', line 166
def remove @element.attributes.delete self.name unless @element.nil? end
#to_s
Returns the attribute value, with entities replaced
#to_string
#value
Returns the UNNORMALIZED value of this attribute. That is, entities have been expanded to their values
# File 'lib/rexml/attribute.rb', line 137
def value return @unnormalized if @unnormalized @unnormalized = Text::unnormalize( @normalized, doctype ) @normalized = nil @unnormalized end
#write(output, indent = -1 ))
Writes this attribute (EG, puts 'key=“value”' to the output)
# File 'lib/rexml/attribute.rb', line 171
def write( output, indent=-1 ) output << to_string end
#xpath
[ GitHub ]# File 'lib/rexml/attribute.rb', line 185
def xpath path = @element.xpath path += "/@#{self.}" return path end