Navigation
Navigation
Aspose.Words FOSS pour .NET inclut un petit Nodes.Navigation espace de noms pour itérer et positionner au sein de l’arbre de nœuds d’un document : NodeEnumerator, le type d’énumérateur derrière l’itération de type for-each sur les nœuds enfants, et DocumentPositionMovement, une énumération décrivant comment la position d’un nœud se rapporte à celle d’un autre lors du parcours. Cela diffère des API de manipulation d’arbre (insertion, suppression et réorganisation des nœuds) couvertes sur le Nodes page — cette page porte sur le déplacement et la comparaison des positions dans un arbre déjà existant.
Itération des nœuds enfants
Tout CompositeNode (la classe de base pour les nœuds conteneurs tels que Document, Section, Body et Paragraph) prend en charge l’itération de style for-each sur ses enfants immédiats via GetEnumerator(), qui — selon sa documentation — fournit le support de l’itération de style for-each sur les nœuds enfants d’un nœud. L’énumérateur retourné implémente IEnumerator<Node>; dans cette surface API, ce rôle est assuré par NodeEnumerator, qui implémente également IDocumentPositionListener afin de pouvoir suivre les changements de position pendant que l’arbre sous-jacent est énuméré. NodeEnumerator expose les membres standards Dispose() et Reset() ainsi que le contrat IEnumerator<Node>.
Déplacement de position du document
DocumentPositionMovement est une énumération comportant six membres — None, Inside, StartEnd, Sibling, Above et Below — représentant la façon dont une position dans le document se rapporte à une autre lors de la navigation dans l’arbre: qu’elle soit inchangée, déplacée à l’intérieur d’un nœud, déplacée vers une frontière de début/fin, déplacée vers un nœud frère, ou déplacée au-dessus ou en dessous de la position de référence. Elle est définie aux côtés de NodeEnumerator dans la même zone Nodes.Navigation de la surface API, reflétant son rôle dans le suivi des changements de position pendant l’énumération.
Conseils et bonnes pratiques
- Utilisez un C#
foreachstandard sur toutCompositeNode(ou appelezGetEnumerator()directement) pour parcourir les enfants immédiats d’un nœud — l’énumérateur gère le contratIEnumerator<Node>pour vous. - Étant donné que
NodeEnumeratorimplémente égalementIDocumentPositionListener, évitez de mettre en cache un énumérateur lors de modifications structurelles de l’arbre; récupérez-le à nouveau viaGetEnumerator()si la collection de nœuds que vous parcourez a changé. - Pour des parcours d’arbre en profondeur (pas seulement les enfants immédiats), utilisez
Node.NextPreOrder(rootNode)/PreviousPreOrder(rootNode), ouGetChildNodes(nodeType, isDeep)avecisDeepdéfini surtrue, plutôt que d’imbriquer manuellement les énumérateurs.
Problèmes courants
| Problème | Cause | Correction |
|---|---|---|
| Énumérer les enfants d’un nœud tout en les modifiant lève une exception ou saute des nœuds | L’arbre a été modifié structurellement pendant l’énumération | Collectez d’abord les nœuds dans un tableau (par exemple avec NodeCollection.ToArray()), puis parcourez le tableau tout en modifiant l’arbre |
| Incertain de la façon dont une position déplacée se rapporte à l’originale | Les valeurs DocumentPositionMovement n’ont pas été inspectées | Vérifiez le DocumentPositionMovement signalé (Inside, StartEnd, Sibling, Above, Below ou None) plutôt que de supposer une relation spécifique |
FAQ
Ai-je besoin d’utiliser NodeEnumerator directement?
Pas habituellement — un C# foreach standard sur un CompositeNode l’utilise implicitement via GetEnumerator(). Recourez à lui directement uniquement lorsque vous avez besoin d’un contrôle explicite sur Dispose()/Reset().
Que décrit DocumentPositionMovement?
La relation entre deux positions dans l’arbre du document lors de la navigation — None, Inside, StartEnd, Sibling, Above ou Below.
En quoi cela diffère-t-il des API de manipulation d’arbre sur la page Nodes?
Le Nodes La page couvre l’insertion, la suppression, le clonage et la réorganisation des nœuds. Cette page couvre le parcours en lecture seule et le positionnement au sein d’un arbre déjà existant.
API Reference Résumé
| Classe / Enum | Description |
|---|---|
NodeEnumerator | IEnumerator<Node> / IDocumentPositionListener implémentation derrière l’itération foreach ; Dispose(), Reset() |
DocumentPositionMovement | Enum à six membres décrivant la position relative lors du parcours (None, Inside, StartEnd, Sibling, Above, Below) |
CompositeNode.GetEnumerator() | Renvoie l’énumérateur des enfants immédiats d’un nœud |