class REXML::XPath - Documentation for Ruby 2.3.0 (original) (raw)
Wrapper class. Use this class to access the XPath functions.
Constants
EMPTY_HASH
A base Hash object, supposing to be used when initializing a default empty namespaces set, but is currently unused. TODO: either set the namespaces=EMPTY_HASH, or deprecate this.
Public Class Methods
each(element, path=nil, namespaces=nil, variables={}) click to toggle source
Iterates over nodes that match the given path, calling the supplied block with the match.
element
The context element
path
The xpath to search for. If not supplied or nil, defaults to '*'
namespaces
If supplied, a Hash which defines a namespace mapping
variables
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.each( node ) { |el| ... }
XPath.each( node, '/*[@attr='v']' ) { |el| ... }
XPath.each( node, 'ancestor::x' ) { |el| ... }
XPath.each( node, '/book/publisher/text()=$publisher', {}, {"publisher"=>"O'Reilly"})
{|el| ... }
def XPath::each element, path=nil, namespaces=nil, variables={}, &block raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash) raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash) parser = XPathParser.new parser.namespaces = namespaces parser.variables = variables path = "*" unless path element = [element] unless element.kind_of? Array parser.parse(path, element).each( &block ) end
first(element, path=nil, namespaces=nil, variables={}) click to toggle source
Finds and returns the first node that matches the supplied xpath.
element
The context element
path
The xpath to search for. If not supplied or nil, returns the first node matching '*'.
namespaces
If supplied, a Hash which defines a namespace mapping.
variables
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"})
def XPath::first element, path=nil, namespaces=nil, variables={} raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash) raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash) parser = XPathParser.new parser.namespaces = namespaces parser.variables = variables path = "*" unless path element = [element] unless element.kind_of? Array parser.parse(path, element).flatten[0] end
match(element, path=nil, namespaces=nil, variables={}) click to toggle source
Returns an array of nodes matching a given XPath.
def XPath::match element, path=nil, namespaces=nil, variables={} parser = XPathParser.new parser.namespaces = namespaces parser.variables = variables path = "*" unless path element = [element] unless element.kind_of? Array parser.parse(path,element) end