Class: REXML::XPath

Inherits:
Object show all
Includes:
Functions
Defined in:
lib/rexml/xpath.rb

Overview

Wrapper class. Use this class to access the XPath functions.

Constant Summary collapse

EMPTY_HASH =
{}

Class Method Summary collapse

Methods included from Functions

boolean, ceiling, compare_language, concat, contains, context=, count, false, floor, get_namespace, id, lang, last, local_name, method_missing, name, namespace_context, namespace_context=, namespace_uri, normalize_space, not, number, position, processing_instruction, round, starts_with, string, string_length, string_value, substring, substring_after, substring_before, sum, text, translate, true, variables, variables=

Class Method Details

.each(element, path = nil, namespaces = nil, variables = {}, &block) ⇒ Object

Itterates 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

XPath.each( node ) { |el| ... }
XPath.each( node, '/*[@attr='v']' ) { |el| ... }
XPath.each( node, 'ancestor::x' ) { |el| ... }


45
46
47
48
49
50
51
52
53
54
# File 'lib/rexml/xpath.rb', line 45

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 = {}) ⇒ Object

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.

XPath.first( node )
XPath.first( doc, "//b"} )
XPath.first( node, "a/x:b", { "x"=>"http://doofus" } )


22
23
24
25
26
27
28
29
30
31
# File 'lib/rexml/xpath.rb', line 22

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 = {}) ⇒ Object

Returns an array of nodes matching a given XPath.



57
58
59
60
61
62
63
64
# File 'lib/rexml/xpath.rb', line 57

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