Spire.Doc represents a document as a tree, every document element is a node of that tree. Some nodes such as section, paragraph and table may have many child nodes. For example, a section node has several paragraph nodes, a paragraph node has many text nodes and each row is the child node of a table node. And other nodes have no child node, such as text-range, image, form-field.
If a node has child nodes, it should be an instance of Spire.Doc.Interface.ICompositeObject.
If you want to operate all the nodes, you can use the tree navigation method to visit each node.
Document Tree Traversal
The following example demonstrates how to traverse a document tree to collect all nodes and ouput the text of all text-range nodes.
[C#]
using System;
using System.Collections.Generic;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using Spire.Doc.Interface;
using Spire.Doc.Collections;
namespace ExtractText
{
class Program
{
static void Main(string[] args)
{
//Open a word document.
Document document = new Document("Sample.doc");
IList<IDocumentObject> nodes = GetAllObjects(document);
foreach (IDocumentObject node in nodes)
{
//Judge the object type.
if (node.DocumentObjectType == DocumentObjectType.TextRange)
{
TextRange textNode = node as TextRange;
Console.WriteLine(textNode.Text);
}
}
}
private static IList<IDocumentObject> GetAllObjects(Document document)
{
//Create a list.
List<IDocumentObject> nodes = new List<IDocumentObject>();
//Create a new queue.
Queue<ICompositeObject> containers = new Queue<ICompositeObject>();
//Put the document objects in the queue.
containers.Enqueue(document);
while (containers.Count > 0)
{
ICompositeObject container = containers.Dequeue();
DocumentObjectCollection docObjects = container.ChildObjects;
foreach (DocumentObject docObject in docObjects)
{
nodes.Add(docObject);
//Judge the docObject.
if (docObject is ICompositeObject)
{
containers.Enqueue(docObject as ICompositeObject);
}
}
}
return nodes;
}
}
}
[VB.NET]
Imports System
Imports System.Collections.Generic
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports Spire.Doc.Interface
Imports Spire.Doc.Collections
Module Module1
Sub Main()
'Open a word document.
Dim document As New Document("Sample.doc")
Dim nodes As IList(Of IDocumentObject)() = GetAllObjects(document)
Dim containers As New Queue(Of ICompositeObject)()
For Each node As IDocumentObject In nodes
'Judge the object type.
If (node.DocumentObjectType = DocumentObjectType.TextRange) Then
Dim textNode As TextRange = node
Console.WriteLine(textNode.Text)
End If
Next
End Sub
Function GetAllObjects(ByVal document As Document) As IList(Of IDocumentObject)
'Create a list.
Dim nodes As New List(Of IDocumentObject)()
'Create a new queue.
Dim containers As New Queue(Of ICompositeObject)()
'Put the document objects in the queue.
containers.Enqueue(document)
While (containers.Count > 0)
Dim container As ICompositeObject = containers.Dequeue()
Dim docObjects As DocumentObjectCollection = container.ChildObjects
For Each docObject As DocumentObject In docObjects
nodes.Add(docObject)
'Judge the docObject.
If TypeOf docObject Is ICompositeObject Then
containers.Enqueue(TryCast(docObject, ICompositeObject))
End If
Next
End While
Return nodes
End Function
End Module
