org.apache.jasper.xmlparser

## Class TreeNode

- java.lang.Object
- - org.apache.jasper.xmlparser.TreeNode

    public class TreeNode
    extends Object

Simplified implementation of a Node from a Document Object Model (DOM) parse of an XML document. This class is used to represent a DOM tree so that the XML parser's implementation of `org.w3c.dom` need not be visible to the remainder of Jasper.

WARNING - Construction of a new tree, or modifications to an existing one, are not thread-safe and such accesses must be synchronized.

Author:
  Craig R. McClanahan

### Field Summary

Fields
`protected HashMap<String,String>` `attributes` The attributes of this node, keyed by attribute name, Instantiated only if required.
`protected String` `body` The body text associated with this node (if any).
`protected ArrayList<TreeNode>` `children` The children of this node, instantiated only if required.
`protected String` `name` The name of this node.
`protected TreeNode` `parent` The parent node of this node.

### Constructor Summary

Constructors
Constructor and Description
`TreeNode(String name, TreeNode parent)` Construct a new node with the specified parent.

### Method Summary

Methods
`void` `addAttribute(String name, String value)` Add an attribute to this node, replacing any existing attribute with the same name.
`void` `addChild(TreeNode node)` Add a new child node to this node.
`String` `findAttribute(String name)` Return the value of the specified node attribute if it exists, or `null` otherwise.
`Iterator<String>` `findAttributes()` Return an Iterator of the attribute names of this node.
`TreeNode` `findChild(String name)` Return the first child node of this node with the specified name, if there is one; otherwise, return `null`.
`Iterator<TreeNode>` `findChildren()` Return an Iterator of all children of this node.
`Iterator<TreeNode>` `findChildren(String name)` Return an Iterator over all children of this node that have the specified name.
`String` `getBody()` Return the body text associated with this node (if any).
`String` `getName()` Return the name of this node.
`void` `setBody(String body)` Set the body text associated with this node (if any).
`String` `toString()` Return a String representation of this TreeNode.
`protected void` `toString(StringBuilder sb, int indent, TreeNode node)` Append to the specified StringBuilder a character representation of this node, with the specified amount of indentation.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### attributes

    protected HashMap<String,String> attributes

The attributes of this node, keyed by attribute name, Instantiated only if required.

#### body

    protected String body

The body text associated with this node (if any).

#### children

    protected ArrayList<TreeNode> children

The children of this node, instantiated only if required.

#### name

    protected String name

The name of this node.

#### parent

    protected TreeNode parent

The parent node of this node.

### Constructor Detail

#### TreeNode

    public TreeNode(String name,
            TreeNode parent)

Construct a new node with the specified parent.

Parameters:
  `name` - The name of this node
  `parent` - The node that is the parent of this node

### Method Detail

#### addAttribute

    public void addAttribute(String name,
                    String value)

Add an attribute to this node, replacing any existing attribute with the same name.

Parameters:
  `name` - The attribute name to add
  `value` - The new attribute value

#### addChild

    public void addChild(TreeNode node)

Add a new child node to this node.

Parameters:
  `node` - The new child node

#### findAttribute

    public String findAttribute(String name)

Return the value of the specified node attribute if it exists, or `null` otherwise.

Parameters:
  `name` - Name of the requested attribute

#### findAttributes

    public Iterator<String> findAttributes()

Return an Iterator of the attribute names of this node. If there are no attributes, an empty Iterator is returned.

#### findChild

    public TreeNode findChild(String name)

Return the first child node of this node with the specified name, if there is one; otherwise, return `null`.

Parameters:
  `name` - Name of the desired child element

#### findChildren

    public Iterator<TreeNode> findChildren()

Return an Iterator of all children of this node. If there are no children, an empty Iterator is returned.

#### findChildren

    public Iterator<TreeNode> findChildren(String name)

Return an Iterator over all children of this node that have the specified name. If there are no such children, an empty Iterator is returned.

Parameters:
  `name` - Name used to select children

#### getBody

    public String getBody()

Return the body text associated with this node (if any).

#### getName

    public String getName()

Return the name of this node.

#### setBody

    public void setBody(String body)

Set the body text associated with this node (if any).

Parameters:
  `body` - The body text (if any)

#### toString

    public String toString()

Return a String representation of this TreeNode.

Overrides:
  `toString` in class `Object`

#### toString

    protected void toString(StringBuilder sb,
                int indent,
                TreeNode node)

Append to the specified StringBuilder a character representation of this node, with the specified amount of indentation.

Parameters:
  `sb` - The StringBuilder to append to
  `indent` - Number of characters of indentation
  `node` - The TreeNode to be printed