Aspose.Words Modelo De Objecto Do Documento (DOM)

O Aspose.Words Document Object Model (DOM) é uma representação na memória de um documento do Word. O Aspose.Words DOM permite ler, manipular e modificar programaticamente o conteúdo e a formatação de um documento do Word.

Esta secção descreve as principais classes do Aspose.Words DOM e as suas relações. Ao utilizar as classes Aspose.Words DOM, pode obter acesso programático aos elementos do documento e à formatação.

Criar Árvore De Objectos Do Documento

Quando um documento é lido no Aspose.Words DOM, então uma árvore de objetos é construída e diferentes tipos de elementos do documento de origem têm seus próprios objetos de árvore DOM com várias propriedades.

Construir Árvore De Nós Do Documento

Quando Aspose.Words lê um documento do Word na memória, ele cria objetos de diferentes tipos que representam vários elementos do documento. Cada execução de um texto, parágrafo, tabela ou seção é um nó, e até mesmo o próprio documento é um nó. Aspose.Words define uma classe para cada tipo de nó de Documento.

A árvore de documentos em Aspose.Words segue o padrão de desenho composto:

  • Todas as classes de nós derivam, em última análise, da classe Node, que é a classe base no modelo de objeto de Documento Aspose.Words.
  • Os nós que podem conter outros nós, por exemplo, Section ou Paragraph, derivam da classe CompositeNode, que por sua vez deriva da classe Node.

O diagrama fornecido abaixo mostra a herança entre as classes de nós do modelo de objeto de documento Aspose.Words (DOM). Os nomes das classes abstratas estão em itálico.

aspose-words-dom

Vejamos um exemplo. A imagem a seguir mostra um documento Microsoft Word com diferentes tipos de conteúdo.

document-example

Ao ler o documento acima no Aspose.Words DOM, A árvore de objetos é criada, conforme mostrado no esquema abaixo.

document-example-dom

Document, Section, Paragraph, Table, Shape, Run, e todas as outras elipses no diagrama são Aspose.Words objetos que representam elementos do documento do Word.

Obter um Node Tipo

Embora a classe Node seja suficiente para distinguir nós diferentes uns dos outros, Aspose.Words fornece a enumeração NodeType para simplificar algumas tarefas API, como selecionar nós de um tipo específico.

O tipo de cada nó pode ser obtido usando a propriedade NodeType. Esta propriedade devolve um valor de enumeração NodeType. Por exemplo, um nó de parágrafo representado pela classe Paragraph retorna NodeType.Paragraph e um nó de tabela representado pela classe Table retorna NodeType.Table.

O exemplo a seguir mostra como obter um tipo de nó usando a enumeração NodeType:

Navegação Na Árvore De Documentos

Aspose.Words representa um documento como uma árvore de nós, que permite navegar entre nós. Esta secção descreve como explorar e navegar na árvore de documentos em Aspose.Words.

Quando você abre o documento de amostra, apresentado anteriormente, no Document Explorer, a árvore de nós aparece exatamente como está representada em Aspose.Words.

document-in-document-explorer

Relações Do Nó Do Documento

Os nós da árvore têm relações entre eles:

  • Um nó que contém outro nó é parent.
  • O nó contido no nó pai é um child. Nós filhos do mesmo pai são sibling nós.
  • O nó root é sempre o nó Document.

Os nós que podem conter outros nós derivam da classe CompositeNode e todos os nós derivam da classe Node. Estas duas classes base fornecem métodos e propriedades comuns para a navegação e modificação da estrutura em árvore.

O diagrama de objetos UML a seguir mostra vários nós do documento de amostra e suas relações entre si por meio das propriedades pai, filho e irmão:

document-nodes-relationships

O documento é proprietário do nó

Um nó sempre pertence a um documento específico, mesmo que tenha sido criado ou removido da árvore, porque estruturas vitais para todo o documento, como estilos e listas, são armazenadas no nó Document. Por exemplo, não é possível ter um Paragraph sem um Document porque cada parágrafo tem um estilo atribuído que é definido globalmente para o documento. Esta regra é usada ao criar novos nós. Adicionar um novo Paragraph diretamente ao DOM requer um objeto document passado para o construtor.

Ao criar um novo parágrafo usando DocumentBuilder, O Construtor sempre tem uma classe Document vinculada a ele por meio da propriedade DocumentBuilder.Document.

O exemplo de código a seguir mostra que, ao criar qualquer nó, um documento que possuirá o nó é sempre definido:

Nó Pai

Cada nó tem um pai especificado pela propriedade ParentNode. Um nó não tem nó pai, ou seja, ParentNode é nulo, nos seguintes casos:

  • O nó acaba de ser criado e ainda não foi adicionado à árvore.
  • O nó foi removido da árvore.
  • Este é o nó raiz Document que sempre tem um nó pai nulo.

Você pode remover um nó de seu pai chamando o método Remove.O exemplo de código a seguir mostra como acessar o nó pai:

Nós Filhos

A maneira mais eficiente de acessar nós filhos de a CompositeNode é por meio das propriedades FirstChild e LastChild que retornam o primeiro e o último nós filhos, respectivamente. Se não houver nós filhos, essas propriedades retornarão null.

CompositeNode

Se um nó não tiver filho, a propriedade ChildNodes retornará uma coleção vazia. Você pode verificar se o CompositeNode contém quaisquer nós filhos usando a propriedade HasChildNodes.

O exemplo de código a seguir mostra como enumerar nós filhos imediatos de a CompositeNode usando o enumerador fornecido pela coleção ChildNodes:

O exemplo de código a seguir mostra como enumerar nós filhos imediatos de a CompositeNode usando acesso indexado:

Nós Irmãos

Você pode obter o nó que imediatamente precede ou segue um nó específico usando as propriedades PreviousSibling e NextSibling, respectivamente. Se um nó for o último filho de seu pai, a propriedade NextSibling será null. Por outro lado, se o nó for o primeiro filho de seu pai, a propriedade PreviousSibling será null.

O exemplo de código a seguir mostra como visitar com eficiência todos os nós filhos diretos e indiretos de um nó composto:

Acesso digitado aos nós Filho e pai

Até agora, discutimos as propriedades que retornam um dos tipos de base – Node ou CompositeNode. Mas às vezes há situações em que você pode precisar converter valores para uma classe de nó específica, como Run ou Paragraph. Ou seja, você não pode se afastar completamente da conversão ao trabalhar com o Aspose.Words DOM, que é composto.

Para reduzir a necessidade de conversão, a maioria das classes Aspose.Words fornece propriedades e coleções que fornecem acesso fortemente tipado. Existem três padrões básicos de acesso digitado:

As propriedades digitadas são apenas atalhos úteis que, por vezes, proporcionam um acesso mais fácil do que as propriedades genéricas herdadas de Node.ParentNode e CompositeNode.FirstChild.

O exemplo de código a seguir mostra como usar propriedades digitadas para acessar nós da árvore de documentos: