class REXML::XPathParser
def preceding(node)
preceding:: includes every element in the document that precedes this node,
in reverse document order
Builds a nodeset of all of the preceding nodes of the supplied node,
def preceding(node) ancestors = [] parent = node.parent while parent ancestors << parent parent = parent.parent end precedings = [] preceding_node = preceding_node_of(node) while preceding_node if ancestors.include?(preceding_node) ancestors.delete(preceding_node) else precedings << XPathNode.new(preceding_node, position: precedings.size + 1) end preceding_node = preceding_node_of(preceding_node) end precedings end