first( path_stack, node )
public
Performs a depth-first (document order) XPath search, and returns the first match. This is the fastest,
lightest way to return a single result.
FIXME: This method is incomplete!
Show source
def first( path_stack, node )
return nil if path.size == 0
case path[0]
when :document
return first( path[1..-1], node )
when :child
for c in node.children
r = first( path[1..-1], c )
return r if r
end
when :qname
name = path[2]
if node.name == name
return node if path.size == 3
return first( path[3..-1], node )
else
return nil
end
when :descendant_or_self
r = first( path[1..-1], node )
return r if r
for c in node.children
r = first( path, c )
return r if r
end
when :node
return first( path[1..-1], node )
when :any
return first( path[1..-1], node )
end
return nil
end