Navigation
Navigation
Aspose.Words .NET için FOSS, küçük bir Nodes.Navigation belge düğüm ağacında yineleme ve konumlandırma için bir ad alanı: NodeEnumerator, alt düğümler üzerinde for-each tarzı yineleme sağlayan enumeratör tipi ve DocumentPositionMovement, bir düğümün konumunun başka bir düğümle gezinme sırasında nasıl ilişkili olduğunu tanımlayan bir enum. Bu, ağaç-manipülasyon API’lerinden (ekleme, kaldırma ve düğümleri yeniden düzenleme) farklıdır ve şu sayfada ele alınan Nodes sayfa — bu sayfa mevcut bir ağaçta konumları hareket ettirmeyi ve karşılaştırmayı kapsar.
Alt Düğümleri Yineleme
Herhangi bir CompositeNode (örneğin Document, Section, Body ve Paragraph gibi kapsayıcı düğümlerin temel sınıfı) GetEnumerator() aracılığıyla doğrudan çocukları üzerinde for-each tarzı yinelemeyi destekler; bu, belgelerine göre, bir düğümün çocuk düğümleri üzerinde for-each tarzı yinelemeyi sağlar. Döndürülen enumerator IEnumerator<Node>‘yi uygular; bu API yüzeyinde bu rol NodeEnumerator tarafından doldurulur ve aynı zamanda IDocumentPositionListener‘i de uygular, böylece temel ağaç yineleme sırasında konum değişikliklerini izleyebilir. NodeEnumerator, standart Dispose() ve Reset() üyelerini IEnumerator<Node> sözleşmesiyle birlikte ortaya koyar.
Belge Konumu Hareketi
DocumentPositionMovement, altı üye içeren bir enumdur — None, Inside, StartEnd, Sibling, Above ve Below — ağaç dolaşılırken belgede bir konumun diğerine nasıl ilişkili olduğunu temsil eder: değişmemiş, bir düğümün içine taşınmış, bir başlangıç/bitiş sınırına taşınmış, bir kardeşe taşınmış veya referans konumunun üzerine ya da altına taşınmış olsun. Bu, API yüzeyinin aynı Nodes.Navigation alanındaki NodeEnumerator ile birlikte tanımlanmıştır ve enum sırasında konum değişikliklerini izleme rolünü yansıtır.
İpuçları ve En İyi Uygulamalar
- Herhangi bir
CompositeNodeüzerinde standart bir C#foreachkullanın (veyaGetEnumerator()doğrudan çağırın) bir düğümün doğrudan çocuklarını dolaşmak için — enumerator sizin içinIEnumerator<Node>sözleşmesini halleder. NodeEnumeratorayrıcaIDocumentPositionListeneruyguladığı için, ağaçtaki yapısal düzenlemeler sırasında bir enumerator’ı önbelleklemekten kaçının; yineleme yaptığınız düğüm koleksiyonu değiştiyse,GetEnumerator()aracılığıyla tekrar elde edin.- Derin ağaç yürüyüşleri için (sadece doğrudan çocuklar değil),
Node.NextPreOrder(rootNode)/PreviousPreOrder(rootNode)kullanın, ya daGetChildNodes(nodeType, isDeep)ileisDeepitrueolarak ayarlayın; enumerator’ları manuel olarak iç içe yerleştirmek yerine.
Yaygın Sorunlar
| Sorun | Neden | Düzeltme |
|---|---|---|
| Bir düğümün çocuklarını sayarken onları değiştirmeniz istisna atar veya düğümleri atlar | Ağaç, sayma sırasında yapısal olarak değiştirildi | Düğümleri önce bir diziye toplayın (örneğin NodeCollection.ToArray() ile), ardından ağacı değiştirirken diziyi yineleyin |
| Taşınan konumun orijinaliyle nasıl ilişkili olduğundan emin değilim | DocumentPositionMovement değerleri incelenmedi | Belirli bir ilişki varsaymak yerine bildirilen DocumentPositionMovement (Inside, StartEnd, Sibling, Above, Below veya None) kontrol edin |
FAQ
NodeEnumerator doğrudan kullanmam gerekiyor mu?
Genellikle değil — bir CompositeNode üzerinde standart C# foreach, GetEnumerator() aracılığıyla onu örtük olarak kullanır. Dispose()/Reset() üzerinde açık kontrol gerektiğinde yalnızca doğrudan ona başvurun.
DocumentPositionMovement neyi tanımlar?
Gezinti sırasında belge ağacındaki iki konum arasındaki ilişki — None, Inside, StartEnd, Sibling, Above veya Below.
Bu, Nodes sayfasındaki tree-manipulation API’lerinden nasıl farklıdır?
Bu Nodes sayfa, düğüm eklemeyi, kaldırmayı, kopyalamayı ve yeniden düzenlemeyi kapsar. Bu sayfa, zaten var olan bir ağaç içinde yalnızca okuma amacıyla gezinmeyi ve konumlandırmayı kapsar.
API Reference Özeti
| Sınıf / Enum | Açıklama |
|---|---|
NodeEnumerator | IEnumerator<Node> / IDocumentPositionListener for-each yinelemesinin arkasındaki uygulama; Dispose(), Reset() |
DocumentPositionMovement | Gezi sırasında göreli konumu tanımlayan altı üyeli enum (None, Inside, StartEnd, Sibling, Above, Below) |
CompositeNode.GetEnumerator() | Bir düğümün doğrudan çocukları için enumeratörü döndürür |