Navigation

Navigation

Aspose.Words FOSS a .NET számára tartalmaz egy kis Nodes.Navigation namespace az iteráláshoz és pozicionáláshoz a dokumentum csomópontfájában: NodeEnumerator, a enumerátor típus a for-each stílusú iteráció mögött a gyermekcsomópontok felett, és DocumentPositionMovement, egy enumeráció, amely leírja, hogyan viszonyul egy csomópont pozíciója egy másikéhoz a bejárás során. Ez különbözik a fa-manipulációs API-któl (beszúrás, eltávolítás és átrendezés), covered on the Nodes oldalon — ez az oldal a már létező fában való mozgást és a pozíciók összehasonlítását tárgyalja.


Gyermekcsomópontok iterálása

Bármely CompositeNode (a tárolócsomópontok, például Document, Section, Body és Paragraph alaposztálya) támogatja a fele-egy-stílusú iterálást az azonnali gyermekein keresztül a GetEnumerator() segítségével, amely – a dokumentációja szerint – támogatja a csomópont gyermekelemeinek fele-egy-stílusú iterálását. A visszaadott enumerátor megvalósítja a IEnumerator<Node> interfészt; ebben a API felületen ezt a szerepet a NodeEnumerator tölti be, amely emellett implementálja a IDocumentPositionListener interfészt is, hogy nyomon követhesse a pozícióváltozásokat, miközben az alatta lévő fa enumerálódik. A NodeEnumerator a szokásos Dispose() és Reset() tagokat is elérhetővé teszi a IEnumerator<Node> szerződés mellett.


Dokumentumpozíció mozgatása

DocumentPositionMovement egy hat tagú felsorolás — None, Inside, StartEnd, Sibling, Above és Below — amely azt ábrázolja, hogyan viszonyul egy dokumentumon belüli pozíció egy másikhoz a fa navigálása során: legyen az változatlan, egy csomópontba áthelyezve, egy kezdő/vég határhoz mozgatva, egy testvércsomóponthoz, vagy a referencia-pozíció fölé vagy alá. Ez a NodeEnumerator mellett van definiálva ugyanabban a Nodes.Navigation területen a API felületen, tükrözve szerepét a pozícióváltozások nyomon követésében az enumerálás közben.


Tippek és bevált gyakorlatok

  • Használjon egy szabványos C# foreach bármely CompositeNode felett (vagy hívja meg közvetlenül a GetEnumerator()-t), hogy bejárja egy csomópont azonnali gyermekeit — az enumerátor kezeli Ön helyett a IEnumerator<Node> szerződést.
  • Mivel a NodeEnumerator is megvalósítja a IDocumentPositionListener-t, kerüld el az enumerátor gyorsítótárazását a fa szerkezeti módosításai között; szerezd vissza újra a GetEnumerator() segítségével, ha a bejárni kívánt csomópontgyűjtemény megváltozott.
  • Mélyebb fa bejárásokhoz (nem csak az azonnali gyermekek) használja a Node.NextPreOrder(rootNode) / PreviousPreOrder(rootNode) kombinációt, vagy a GetChildNodes(nodeType, isDeep)-t, ahol a isDeep true-re van állítva, ahelyett, hogy manuálisan egymásba ágyazná az enumerátorokat.

Gyakori problémák

ProblémaOkaJavítás
A csomópont gyermekelemeinek felsorolása közben azok módosítása kivételt eredményez vagy kihagyja a csomópontokatA fa szerkezetileg megváltozott a felsorolás soránElőször gyűjtsd össze a csomópontokat egy tömbbe (például a NodeCollection.ToArray() segítségével), majd iteráld a tömböt a fa módosítása közben
Nem vagyok biztos benne, hogy a áthelyezett pozíció hogyan viszonyul az eredetihezA DocumentPositionMovement értékek nem lettek ellenőrizveEllenőrizd a jelentett DocumentPositionMovement-t (Inside, StartEnd, Sibling, Above, Below vagy None) ahelyett, hogy konkrét kapcsolatot feltételeznél

FAQ

Kell-e közvetlenül a NodeEnumerator használni?

Általában nem — egy szabványos C# foreach egy CompositeNode felett implicit módon használja a GetEnumerator() segítségével. Csak akkor nyúlj hozzá közvetlenül, ha explicit vezérlésre van szükség a Dispose()/Reset() felett.

Mit ír le a DocumentPositionMovement?

A dokumentumfa két pozíciója közötti kapcsolat a navigáció során — None, Inside, StartEnd, Sibling, Above vagy Below.

Miben különbözik ez a Nodes oldalán található fa-manipulációs API-któl?

A Nodes Az oldal lefedi a csomópontok beszúrását, eltávolítását, klónozását és újraszervezését. Ez az oldal a már létező fa csak olvasásra szolgáló bejárását és pozicionálását taglalja.


API Reference összefoglaló

Osztály / EnumLeírás
NodeEnumeratorIEnumerator<Node> / IDocumentPositionListener megvalósítás a for-each iteráció mögött; Dispose(), Reset()
DocumentPositionMovementHat tagú enum, amely a bejárás során a relatív pozíciót írja le (None, Inside, StartEnd, Sibling, Above, Below)
CompositeNode.GetEnumerator()Visszaadja a node közvetlen gyermekeinek enumerátorát

Lásd még:

 Magyar