method
step
v2_6_3 -
Show latest stable
- Class:
REXML::XPathParser
step(path_stack, any_type: :element, order: :forward)private
No documentation available.
# File lib/rexml/xpath_parser.rb, line 429
def step(path_stack, any_type: :element, order: :forward)
nodesets = yield
begin
# enter(:step, path_stack, nodesets)
nodesets = node_test(path_stack, nodesets, any_type: any_type)
while path_stack[0] == :predicate
path_stack.shift # :predicate
predicate_expression = path_stack.shift.dclone
nodesets = evaluate_predicate(predicate_expression, nodesets)
end
if nodesets.size == 1
ordered_nodeset = nodesets[0]
else
raw_nodes = []
nodesets.each do |nodeset|
nodeset.each do |node|
if node.respond_to?(:raw_node)
raw_nodes << node.raw_node
else
raw_nodes << node
end
end
end
ordered_nodeset = sort(raw_nodes, order)
end
new_nodeset = []
ordered_nodeset.each do |node|
# TODO: Remove duplicated
new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1)
end
new_nodeset
# ensure
# leave(:step, path_stack, new_nodeset)
end
end