CompositeNode class

CompositeNode class

Base class for nodes that can contain other nodes. To learn more, visit the Aspose.Words Document Object Model (DOM) documentation article.

A document is represented as a tree of nodes, similar to DOM or XmlDocument.

For more info see the Composite design pattern.

The CompositeNode class:

  • Provides access to the child nodes.

  • Implements Composite operations such as insert and remove children.

  • Provides methods for XPath navigation.

Inheritance: CompositeNodeNode

Properties

Name Description
child_nodes Gets all immediate child nodes of this node.
count Gets the number of immediate children of this node.
custom_node_id Specifies custom node identifier.
(Inherited from Node)
document Gets the document to which this node belongs.
(Inherited from Node)
first_child Gets the first child of the node.
has_child_nodes Returns True if this node has any child nodes.
is_composite Returns True as this node can have child nodes.
last_child Gets the last child of the node.
next_sibling Gets the node immediately following this node.
(Inherited from Node)
node_type Gets the type of this node.
(Inherited from Node)
parent_node Gets the immediate parent of this node.
(Inherited from Node)
previous_sibling Gets the node immediately preceding this node.
(Inherited from Node)
range Returns a Range object that represents the portion of a document that is contained in this node.
(Inherited from Node)

Methods

Name Description
accept(visitor) Accepts a visitor.
(Inherited from Node)
append_child(new_child) Adds the specified node to the end of the list of child nodes for this node.
clone(is_clone_children) Creates a duplicate of the node.
(Inherited from Node)
get_ancestor(ancestor_type) Gets the first ancestor of the specified object type.
(Inherited from Node)
get_ancestor(ancestor_type) Gets the first ancestor of the specified NodeType.
(Inherited from Node)
get_child(node_type, index, is_deep) Returns an Nth child node that matches the specified type.
get_child_nodes(node_type, is_deep) Returns a live collection of child nodes that match the specified type.
get_text() Gets the text of this node and of all its children.
index_of(child) Returns the index of the specified child node in the child node array.
insert_after(new_child, ref_child) Inserts the specified node immediately after the specified reference node.
insert_before(new_child, ref_child) Inserts the specified node immediately before the specified reference node.
next_pre_order(root_node) Gets next node according to the pre-order tree traversal algorithm.
(Inherited from Node)
node_type_to_string(node_type) A utility method that converts a node type enum value into a user friendly string.
(Inherited from Node)
prepend_child(new_child) Adds the specified node to the beginning of the list of child nodes for this node.
previous_pre_order(root_node) Gets the previous node according to the pre-order tree traversal algorithm.
(Inherited from Node)
remove() Removes itself from the parent.
(Inherited from Node)
remove_all_children() Removes all the child nodes of the current node.
remove_child(old_child) Removes the specified child node.
remove_smart_tags() Removes all SmartTag descendant nodes of the current node.
select_nodes(xpath) Selects a list of nodes matching the XPath expression.
select_single_node(xpath) Selects the first Node that matches the XPath expression.
to_string(save_format) Exports the content of the node into a string in the specified format.
(Inherited from Node)
to_string(save_options) Exports the content of the node into a string using the specified save options.
(Inherited from Node)

Examples

Shows how to traverse through a composite node’s collection of child nodes.

doc = aw.Document()

# Add two runs and one shape as child nodes to the first paragraph of this document.
paragraph = doc.get_child(aw.NodeType.PARAGRAPH, 0, True).as_paragraph()
paragraph.append_child(aw.Run(doc, "Hello world! "))

shape = aw.drawing.Shape(doc, aw.drawing.ShapeType.RECTANGLE)
shape.width = 200
shape.height = 200
# Note that the 'custom_node_id' is not saved to an output file and exists only during the node lifetime.
shape.custom_node_id = 100
shape.wrap_type = aw.drawing.WrapType.INLINE
paragraph.append_child(shape)

paragraph.append_child(aw.Run(doc, "Hello again!"))

# Iterate through the paragraph's collection of immediate children,
# and print any runs or shapes that we find within.
children = paragraph.child_nodes

self.assertEqual(3, paragraph.child_nodes.count)

for child in children:
    if child.node_type == aw.NodeType.RUN:
        print("Run contents:")
        print(f"\t\"{child.get_text().strip()}\"")

    elif child.node_type == aw.NodeType.SHAPE:
        child_shape = child.as_shape()
        print("Shape:")
        print(f"\t{child_shape.shape_type}, {child_shape.width}x{child_shape.height}")

See Also