Returns the next sibling that is an element, or nil if there is no Element sibling after this one
doc = Document.new '<a><b/>text<c/></a>' doc.root.elements['b'].next_element #-> <c/> doc.root.elements['c'].next_element #-> nil
Returns the previous sibling that is an element, or nil if there is no Element sibling prior to this one
doc = Document.new '<a><b/>text<c/></a>' doc.root.elements['c'].previous_element #-> <b/> doc.root.elements['b'].previous_element #-> nil
Evaluates to true if this element has any attributes set, false otherwise.
Adds an attribute to this element, overwriting any existing attribute by the same name.
can be either an Attribute or a String.  If an Attribute, the attribute is added to the list of Element attributes.  If String, the argument is used as the name of the new attribute, and the value parameter must be supplied.
Required if key is a String, and ignored if the first argument is an Attribute.  This is a String, and is used as the value of the new Attribute.  This should be the unnormalized value of the attribute (without entities).
the Attribute added
e = Element.new 'e' e.add_attribute( 'a', 'b' ) #-> <e a='b'/> e.add_attribute( 'x:a', 'c' ) #-> <e a='b' x:a='c'/> e.add_attribute Attribute.new('b', 'd') #-> <e a='b' x:a='c' b='d'/>
Add multiple attributes to this element.
is either a hash, or array of arrays
el.add_attributes( {"name1"=>"value1", "name2"=>"value2"} ) el.add_attributes( [ ["name1","value1"], ["name2"=>"value2"] ] )
Removes an attribute
either an Attribute or a String.  In either case, the attribute is found by matching the attribute name to the argument, and then removed.  If no attribute is found, no action is taken.
the attribute removed, or nil if this Element did not contain a matching attribute
e = Element.new('E') e.add_attribute( 'name', 'Sean' ) #-> <E name='Sean'/> r = e.add_attribute( 'sur:name', 'Russell' ) #-> <E name='Sean' sur:name='Russell'/> e.delete_attribute( 'name' ) #-> <E sur:name='Russell'/> e.delete_attribute( r ) #-> <E/>
Iterates over the attributes of an Element.  Yields actual Attribute nodes, not String values.
doc = Document.new '<a x="1" y="2"/>' doc.root.attributes.each_attribute {|attr| p attr.expanded_name+" => "+attr.value }
Fetches an attribute
the name by which to search for the attribute.  Can be a prefix:name namespace name.
The first matching attribute, or nil if there was none. This
value is an Attribute node, not the String value of the attribute.
doc = Document.new '<a x:foo="1" foo="2" bar="3"/>' doc.root.attributes.get_attribute("foo").value #-> "2" doc.root.attributes.get_attribute("x:foo").value #-> "1"
Generates a Source object @param arg Either a String, or an IO @return a Source, or nil if a bad argument was given
Reorders an array of nodes so that they are in document order It tries to do this efficiently.
FIXME: I need to get rid of this, but the issue is that most of the XPath interpreter functions as a filter, which means that we lose context going in and out of function calls.  If I knew what the index of the nodes was, I wouldn’t have to do this.  Maybe add a document IDX for each node? Problems with mutable documents.  Or, rewrite everything.
Set @@default_parser to new_value if it is one of the available parsers. Else raise NotValidXMLParser error.
Merge a set of command options with the set of default options (without modifying the default option hash).