To find a common pedigree between two nodes:
(node1.ancestors & node2.ancestors).first
A more generalized function that works with multiple nodes:
# accepts node objects or selector strings class Nokogiri::XML::Element def common_ancestor(*nodes) nodes = nodes.map do |node| String === node ? self.document.at(node) : node end nodes.inject(self.ancestors) do |common, node| common & node.ancestors end.first end end
source share