Navigation

Navigation

Aspose.Words FOSS voor .NET bevat een kleine Nodes.Navigation namespace voor itereren en positioneren binnen de knoopboom van een document: NodeEnumerator, het enumeratortype achter for-each-stijl iteratie over kindknooppunten, en DocumentPositionMovement, een enumeratie die beschrijft hoe de positie van één knoop zich verhoudt tot een andere tijdens traverseren. Dit is verschillend van de boom-manipulatie-API’s (invoegen, verwijderen en reorganiseren van knopen) die behandeld worden op de Nodes pagina — deze pagina behandelt het verplaatsen door en vergelijken van posities in een boom die al bestaat.


Itereren van kindknopen

Elke CompositeNode (de basisklasse voor containerknooppunten zoals Document, Section, Body en Paragraph) ondersteunt for-each-stijl iteratie over zijn directe kinderen via GetEnumerator(), die — volgens de documentatie — ondersteuning biedt voor de for-each-stijl iteratie over de kindknooppunten van een knoop. De geretourneerde enumerator implementeert IEnumerator<Node>; in deze API laag wordt die rol vervuld door NodeEnumerator, die ook IDocumentPositionListener implementeert zodat hij positie-veranderingen kan bijhouden terwijl de onderliggende boom wordt geënumereerd. NodeEnumerator exposeert de standaard Dispose() en Reset() leden naast het IEnumerator<Node> contract.


Documentpositieverplaatsing

DocumentPositionMovement is een enumeratie met zes leden — None, Inside, StartEnd, Sibling, Above en Below — die weergeven hoe één positie in het document zich verhoudt tot een andere terwijl de boom wordt genavigeerd: of deze onveranderd is, verplaatst naar binnen een knoop, verplaatst naar een begin/eind-grens, verplaatst naar een broer/zus, of verplaatst boven of onder de referentiepositie. Het wordt gedefinieerd naast NodeEnumerator in hetzelfde Nodes.Navigation gebied van de API laag, en weerspiegelt zijn rol bij het bijhouden van positie-veranderingen tijdens enumeratie.


Tips en best practices

  • Gebruik een standaard C# foreach over elke CompositeNode (of roep GetEnumerator() direct aan) om de directe kinderen van een knoop te doorlopen — de enumerator handelt het IEnumerator<Node> contract voor u af.
  • Omdat NodeEnumerator ook IDocumentPositionListener implementeert, vermijd het cachen van een enumerator over structurele bewerkingen aan de boom; verkrijg deze opnieuw via GetEnumerator() als de knoopverzameling die u doorloopt is veranderd.
  • Voor diepe boomtraversals (niet alleen directe kinderen), gebruik Node.NextPreOrder(rootNode) / PreviousPreOrder(rootNode), of GetChildNodes(nodeType, isDeep) met isDeep ingesteld op true, in plaats van enumerators handmatig te nesten.

Veelvoorkomende problemen

ProbleemOorzaakOplossing
Het enumereren van de kinderen van een knoop terwijl je ze wijzigt, veroorzaakt fouten of slaat knopen overDe boom werd tijdens het enumereren structureel gewijzigdVerzamel eerst de knopen in een array (bijvoorbeeld met NodeCollection.ToArray()), en loop vervolgens door de array terwijl je de boom wijzigt
Onzeker hoe een verplaatste positie zich verhoudt tot de oorspronkelijkeDocumentPositionMovement waarden werden niet geïnspecteerdControleer de gerapporteerde DocumentPositionMovement (Inside, StartEnd, Sibling, Above, Below of None) in plaats van een specifieke relatie aan te nemen

FAQ

Moet ik NodeEnumerator direct gebruiken?

Niet meestal — een standaard C# foreach over een CompositeNode gebruikt het impliciet via GetEnumerator(). Gebruik het direct alleen wanneer je expliciete controle nodig hebt over Dispose()/Reset().

Wat beschrijft DocumentPositionMovement?

De relatie tussen twee posities in de documentboom tijdens navigatie — None, Inside, StartEnd, Sibling, Above of Below.

Hoe verschilt dit van de boom-manipulatie-API’s op de Nodes-pagina?

De Nodes de pagina behandelt het invoegen, verwijderen, klonen en reorganiseren van knopen. Deze pagina behandelt alleen-lezen doorlopen en positionering binnen een boom die al bestaat.


API Reference Samenvatting

Klasse / EnumBeschrijving
NodeEnumeratorIEnumerator<Node> / IDocumentPositionListener implementatie achter for-each-iteratie; Dispose(), Reset()
DocumentPositionMovementZesleden-enum die de relatieve positie tijdens traversie beschrijft (None, Inside, StartEnd, Sibling, Above, Below)
CompositeNode.GetEnumerator()Retourneert de enumerator voor de directe kinderen van een knoop

Zie ook

 Nederlands