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.

Remarks

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

NameDescription
countGets the number of immediate children of this node.
custom_node_idSpecifies custom node identifier.
(Inherited from Node)
documentGets the document to which this node belongs.
(Inherited from Node)
first_childGets the first child of the node.
has_child_nodesReturns True if this node has any child nodes.
is_compositeReturns True as this node can have child nodes.
last_childGets the last child of the node.
next_siblingGets the node immediately following this node.
(Inherited from Node)
node_typeGets the type of this node.
(Inherited from Node)
parent_nodeGets the immediate parent of this node.
(Inherited from Node)
previous_siblingGets the node immediately preceding this node.
(Inherited from Node)
rangeReturns a Range object that represents the portion of a document that is contained in this node.
(Inherited from Node)

Methods

NameDescription
accept(visitor)Accepts a visitor.
(Inherited from Node)
accept_end(visitor)When implemented in a derived class, calls the VisitXXXEnd method of the specified document visitor.
accept_start(visitor)When implemented in a derived class, calls the VisitXXXStart method of the specified document visitor.
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.get_child_nodes(aw.NodeType.ANY, False)

self.assertEqual(3, paragraph.get_child_nodes(aw.NodeType.ANY, False).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