Navigation

Navigation

Aspose.Words FOSS untuk .NET menyertakan sebuah kecil Nodes.Navigation namespace untuk iterasi dan penempatan dalam pohon node dokumen: NodeEnumerator, tipe enumerator di balik iterasi gaya for-each atas node anak, dan DocumentPositionMovement, sebuah enumerasi yang menjelaskan bagaimana posisi satu node berhubungan dengan node lain selama penelusuran. Ini berbeda dari API manipulasi pohon (menyisipkan, menghapus, dan mengatur ulang node) yang dibahas pada Nodes halaman — halaman ini membahas pergerakan dan perbandingan posisi dalam pohon yang sudah ada.


Mengiterasi Node Anak

Setiap CompositeNode (kelas dasar untuk node kontainer seperti Document, Section, Body, dan Paragraph) mendukung iterasi gaya for-each atas anak langsungnya melalui GetEnumerator(), yang — menurut dokumentasinya — menyediakan dukungan untuk gaya iterasi for-each atas node anak dari sebuah node. Enumerator yang dikembalikan mengimplementasikan IEnumerator<Node>; dalam permukaan API ini, peran tersebut diisi oleh NodeEnumerator, yang juga mengimplementasikan IDocumentPositionListener sehingga dapat melacak perubahan posisi saat pohon yang mendasarinya sedang di-enumerasi. NodeEnumerator mengekspos anggota standar Dispose() dan Reset() bersama dengan kontrak IEnumerator<Node>.


Pergerakan Posisi Dokumen

DocumentPositionMovement adalah sebuah enumerasi dengan enam anggota — None, Inside, StartEnd, Sibling, Above, dan Below — yang mewakili bagaimana satu posisi dalam dokumen berhubungan dengan posisi lain saat pohon dinavigasi: apakah tidak berubah, dipindahkan ke dalam sebuah node, dipindahkan ke batas awal/akhir, dipindahkan ke saudara, atau dipindahkan di atas atau di bawah posisi referensi. Ini didefinisikan bersama NodeEnumerator dalam area Nodes.Navigation yang sama pada permukaan API, mencerminkan perannya dalam melacak perubahan posisi selama enumerasi.


Tips dan Praktik Terbaik

  • Gunakan C# foreach standar pada setiap CompositeNode (atau panggil GetEnumerator() secara langsung) untuk menjelajahi anak langsung sebuah node — enumerator menangani kontrak IEnumerator<Node> untuk Anda.
  • Karena NodeEnumerator juga mengimplementasikan IDocumentPositionListener, hindari menyimpan enumerator di cache saat melakukan perubahan struktural pada pohon; dapatkan kembali melalui GetEnumerator() jika koleksi node yang Anda iterasi telah berubah.
  • Untuk penelusuran pohon yang dalam (bukan hanya anak langsung), gunakan Node.NextPreOrder(rootNode) / PreviousPreOrder(rootNode), atau GetChildNodes(nodeType, isDeep) dengan isDeep diatur ke true, alih-alih menumpuk enumerator secara manual.

Masalah Umum

MasalahPenyebabPerbaikan
Enumerasi anak node sambil memodifikasinya dapat melempar atau melewatkan nodePohon diubah secara struktural selama enumerasiKumpulkan node ke dalam array terlebih dahulu (misalnya dengan NodeCollection.ToArray()), kemudian iterasi array sambil memodifikasi pohon
Tidak yakin bagaimana posisi yang dipindahkan berhubungan dengan posisi asliNilai DocumentPositionMovement tidak diperiksaPeriksa DocumentPositionMovement yang dilaporkan (Inside, StartEnd, Sibling, Above, Below, atau None) alih-alih mengasumsikan hubungan tertentu

FAQ

Apakah saya perlu menggunakan NodeEnumerator secara langsung?

Tidak biasanya — C# foreach standar pada sebuah CompositeNode menggunakannya secara implisit melalui GetEnumerator(). Gunakan secara langsung hanya ketika Anda memerlukan kontrol eksplisit atas Dispose()/Reset().

Apa yang DocumentPositionMovement jelaskan?

Hubungan antara dua posisi dalam pohon dokumen selama navigasi — None, Inside, StartEnd, Sibling, Above, atau Below.

Bagaimana ini berbeda dari API manipulasi pohon pada halaman Nodes?

The Nodes halaman mencakup penyisipan, penghapusan, pengkloningan, dan reorganisasi node. Halaman ini mencakup traversasi read-only dan penempatan dalam pohon yang sudah ada.


API Reference Ringkasan

Kelas / EnumDeskripsi
NodeEnumeratorIEnumerator<Node> / IDocumentPositionListener implementasi di belakang iterasi for-each; Dispose(), Reset()
DocumentPositionMovementEnum enam anggota yang menggambarkan posisi relatif selama penelusuran (None, Inside, StartEnd, Sibling, Above, Below)
CompositeNode.GetEnumerator()Mengembalikan enumerator untuk anak langsung sebuah node

Lihat Juga

 Bahasa Indonesia