Creates a shallow copy of self.
d = Document.new "<a><b/><b/><c><d/></c></a>" new_a = d.root.clone puts new_a # => "<a/>"
Evaluates to true
if whitespace is respected for this element. This is the case if:
Neither :respect_whitespace
nor :compress_whitespace
has any value
The context has :respect_whitespace
set to :all
or an array containing the name of this element, and :compress_whitespace
isn’t set to :all
or an array containing the name of this element.
The evaluation is tested against expanded_name
, and so is namespace sensitive.
Evaluates to the URI
for a prefix, or the empty string if no such namespace is declared for this element. Evaluates recursively for ancestors. Returns the default namespace, if there is one.
the prefix to search for. If not supplied, returns the default namespace if one exists
the namespace URI
as a String
, or nil if no such namespace exists. If the namespace is undefined, returns an empty string
doc = Document.new("<a xmlns='1' xmlns:y='2'><b/><c xmlns:z='3'/></a>") b = doc.elements['//b'] b.namespace # -> '1' b.namespace("y") # -> '2'
Returns true
if there are no Element
children, false
otherwise
Private helper class. Removes quotes from quoted strings
Given an array of nodes it filters the array based on the path. The result is that when this method returns, the array will contain elements which match the path
@return true if the Source
is exhausted
FIXME This probably won’t work properly
Finds and returns the first node that matches the supplied xpath.
The context element
The xpath to search for. If not supplied or nil, returns the first node matching ‘*’.
If supplied, a Hash
which defines a namespace mapping.
If supplied, a Hash
which maps $variables in the query to values. This can be used to avoid XPath
injection attacks or to automatically handle escaping string values.
XPath.first( node ) XPath.first( doc, "//b"} ) XPath.first( node, "a/x:b", { "x"=>"http://doofus" } ) XPath.first( node, '/book/publisher/text()=$publisher', {}, {"publisher"=>"O'Reilly"})