Contrary to the pages of complex hand-written recursive methods I found on StackOverflow when Googling this, it is actually as simple as
noko = Nokogiri::XML("my_noko_file.xml") parent_node = noko.root.xpath("//MyNodeName") children_named_floyd = parent_node.xpath(".//Floyd")
If you want to search on more complex criteria, you can also add in extra sauce to your xpath.
noko = Nokogiri::XML("my_noko_file.xml") # Searches your entire XML tree for an XML node type "MyNodeName" that has an attribute "id" set to a value of '1234' # Then grabs the XML node of type "Something" from within the found NodeSet parent_node = noko.root.xpath("//MyNodeName[@id='1234']").at("Something") # Grab all children of the "Something" node that are of type "Floyd" children_named_floyd = parent_node.xpath(".//Floyd")
Nokogiri is a great gem. But I do often wish it’s docs had more examples and less byzantine explanations for common operations like these. But in the meantime, let’s hope Google will continue to fill in the gaps.