Navigation

Navigation

Aspose.Words FOSS para .NET inclui um pequeno Nodes.Navigation namespace para iterar e posicionar dentro da árvore de nós de um documento: NodeEnumerator, o tipo enumerador por trás da iteração estilo for-each sobre nós filhos, e DocumentPositionMovement, uma enumeração que descreve como a posição de um nó se relaciona a outro durante a travessia. Isso é distinto das APIs de manipulação de árvore (inserção, remoção e reorganização de nós) cobertas na Nodes página — esta página cobre a movimentação e comparação de posições em uma árvore que já existe.


Iterando Nós Filhos

Qualquer CompositeNode (a classe base para nós contêineres como Document, Section, Body e Paragraph) suporta iteração estilo for-each sobre seus filhos imediatos via GetEnumerator(), que — conforme sua documentação — fornece suporte ao estilo de iteração for-each sobre os nós filhos de um nó. O enumerador retornado implementa IEnumerator<Node>; nesta camada API, esse papel é preenchido por NodeEnumerator, que também implementa IDocumentPositionListener para que possa rastrear mudanças de posição enquanto a árvore subjacente está sendo enumerada. NodeEnumerator expõe os membros padrão Dispose() e Reset() ao lado do contrato IEnumerator<Node>.


Movimento de Posição no Documento

DocumentPositionMovement é uma enumeração com seis membros — None, Inside, StartEnd, Sibling, Above e Below — representando como uma posição no documento se relaciona com outra à medida que a árvore é percorrida: se permanece inalterada, movida para dentro de um nó, movida para um limite inicial/final, movida para um nó irmão, ou movida acima ou abaixo da posição de referência. Ela é definida ao lado de NodeEnumerator na mesma área Nodes.Navigation da camada API, refletindo seu papel no rastreamento de mudanças de posição durante a enumeração.


Dicas e Melhores Práticas

  • Use um C# foreach padrão sobre qualquer CompositeNode (ou chame GetEnumerator() diretamente) para percorrer os filhos imediatos de um nó — o enumerador lida com o contrato IEnumerator<Node> para você.
  • Como NodeEnumerator também implementa IDocumentPositionListener, evite armazenar em cache um enumerador durante edições estruturais na árvore; recupere-o novamente via GetEnumerator() se a coleção de nós que você está iterando tiver sido alterada.
  • Para percursos profundos da árvore (não apenas filhos imediatos), use Node.NextPreOrder(rootNode) / PreviousPreOrder(rootNode), ou GetChildNodes(nodeType, isDeep) com isDeep definido como true, em vez de aninhar enumeradores manualmente.

Problemas comuns

ProblemaCausaCorreção
Enumerar os filhos de um nó enquanto os modifica gera exceções ou pula nósA árvore foi alterada estruturalmente durante a enumeraçãoColete os nós em um array primeiro (por exemplo, com NodeCollection.ToArray()), depois itere o array enquanto modifica a árvore
Não tem certeza de como uma posição movida se relaciona com a originalOs valores de DocumentPositionMovement não foram inspecionadosVerifique o DocumentPositionMovement reportado (Inside, StartEnd, Sibling, Above, Below ou None) em vez de assumir um relacionamento específico

FAQ

Preciso usar NodeEnumerator diretamente?

Normalmente não — o C# foreach padrão sobre um CompositeNode o utiliza implicitamente via GetEnumerator(). Recorra a ele diretamente apenas quando precisar de controle explícito sobre Dispose()/Reset().

O que DocumentPositionMovement descreve?

O relacionamento entre duas posições na árvore de documento durante a navegação — None, Inside, StartEnd, Sibling, Above ou Below.

Como isso difere das APIs de manipulação de árvore na página Nodes?

O Nodes A página cobre inserção, remoção, clonagem e reorganização de nós. Esta página cobre travessia somente leitura e posicionamento dentro de uma árvore que já existe.


API Reference Resumo

Classe / EnumDescrição
NodeEnumeratorIEnumerator<Node> / IDocumentPositionListener implementação por trás da iteração foreach; Dispose(), Reset()
DocumentPositionMovementEnum de seis membros descrevendo a posição relativa durante a travessia (None, Inside, StartEnd, Sibling, Above, Below)
CompositeNode.GetEnumerator()Retorna o enumerador para os filhos imediatos de um nó

Ver também

 Português