module Oga::XML::Traversal
Module that provides methods to traverse DOM trees.
Public Instance Methods
each_node() { |current| ... }
click to toggle source
Traverses through the node and yields every child node to the supplied block.
The block’s body can also determine whether or not to traverse child nodes. Preventing a node’s children from being traversed can be done by using ‘throw :skip_children`
This method uses a combination of breadth-first and depth-first traversal to traverse the entire XML
tree in document order. See en.wikipedia.org/wiki/Breadth-first_search for more information.
@example
document.each_node do |node| p node.class end
@example Skipping the children of a certain node
document.each_node do |node| if node.is_a?(Oga::XML::Element) and node.name == 'book' throw :skip_children end end
@yieldparam [Oga::XML::Node] The current node.
# File lib/oga/xml/traversal.rb, line 29 def each_node return to_enum(:each_node) unless block_given? visit = children.to_a.reverse until visit.empty? current = visit.pop catch :skip_children do yield current current.children.to_a.reverse_each do |child| visit << child end end end end