node - rexml: Ruby Standard Library Documentation

## Module Node¶ ↑

Tasks on this page:

- Siblings

  - Task: Find Previous Sibling

  - Task: Find Next Sibling

- Position

  - Task: Find Own Index Among Siblings

- Recursive Traversal

  - Task: Traverse Each Recursively

- Recursive Search

  - Task: Traverse Each Recursively

- Representation

  - Task: Represent a String

- Parent?

  - Task: Determine Whether the Node is a Parent

### Siblings¶ ↑

#### Task: Find Previous Sibling¶ ↑

Use method Node.previous_sibling_node to retrieve the previous sibling:

    d = REXML::Document.new('<root><a/><b/><c/></root>')
    b = d.root[1]           # => <b/>
    b.previous_sibling_node # => <a/>

#### Task: Find Next Sibling¶ ↑

Use method Node.next_sibling_node to retrieve the next sibling:

    d = REXML::Document.new('<root><a/><b/><c/></root>')
    b = d.root[1]       # => <b/>
    b.next_sibling_node # => <c/>

### Position¶ ↑

#### Task: Find Own Index Among Siblings¶ ↑

Use method Node.index_in_parent to retrieve the 1-based index of this node among its siblings:

    d = REXML::Document.new('<root><a/><b/><c/></root>')
    b = d.root[1]     # => <b/>
    b.index_in_parent # => 2

### Recursive Traversal¶ ↑

#### Task: Traverse Each Recursively¶ ↑

Use method Node.each_recursive to traverse a tree of nodes recursively:

    xml_string = '<root><a><b><c></c></b><b><c></c></b></a></root>'
    d = REXML::Document.new(xml_string)
    d.root.each_recursive {|node| p node }

Output:

    <a> ... </>
    <b> ... </>
    <c/>
    <b> ... </>
    <c/>

### Recursive Search¶ ↑

#### Task: Traverse Each Recursively¶ ↑

Use method Node.find_first_recursive to search a tree of nodes recursively:

    xml_string = '<root><a><b><c></c></b><b><c></c></b></a></root>'
    d = REXML::Document.new(xml_string)
    d.root.find_first_recursive {|node| node.name == 'c' } # => <c/>

### Representation¶ ↑

#### Task: Represent a String¶ ↑

Use method Node.to_s to represent the node as a string:

    xml_string = '<root><a><b><c></c></b><b><c></c></b></a></root>'
    d = REXML::Document.new(xml_string)
    d.root.to_s # => "<root><a><b><c/></b><b><c/></b></a></root>"

### Parent?¶ ↑

#### Task: Determine Whether the Node is a Parent¶ ↑

Use method Node.parent? to determine whether the node is a parent; class Text derives from Node:

    d = REXML::Document.new('<root><a/>text<b/>more<c/></root>')
    t = d.root[1] # => "text"
    t.parent?     # => false

Class Parent also derives from Node, but overrides this method:

    p = REXML::Parent.new
    p.parent? # => true