diff options
Diffstat (limited to 'lib/rexml/node.rb')
-rw-r--r-- | lib/rexml/node.rb | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/rexml/node.rb b/lib/rexml/node.rb index 5f414c03ef..e5dec72a9d 100644 --- a/lib/rexml/node.rb +++ b/lib/rexml/node.rb @@ -36,5 +36,31 @@ module REXML def parent? false; end + + + # Visit all subnodes of +self+ recursively + def each_recursive(&block) # :yields: node + self.elements.each {|node| + block.call(node) + node.each_recursive(&block) + } + end + + # Find (and return) first subnode (recursively) for which the block + # evaluates to true. Returns +nil+ if none was found. + def find_first_recursive(&block) # :yields: node + each_recursive {|node| + return node if block.call(node) + } + return nil + end + + # Returns the index that +self+ has in its parent's elements array, so that + # the following equation holds true: + # + # node == node.parent.elements[node.index_in_parent] + def index_in_parent + parent.index(self)+1 + end end end |