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# foreach kullanın (veya GetEnumerator() doğrudan çağırın) bir düğümün doğrudan çocuklarını dolaşmak için — enumerator sizin için IEnumerator<Node> sözleşmesini halleder.
  • NodeEnumerator ayrıca IDocumentPositionListener uyguladığı 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 da GetChildNodes(nodeType, isDeep) ile isDeepi true olarak ayarlayın; enumerator’ları manuel olarak iç içe yerleştirmek yerine.

Yaygın Sorunlar

SorunNedenDüzeltme
Bir düğümün çocuklarını sayarken onları değiştirmeniz istisna atar veya düğümleri atlarAğaç, sayma sırasında yapısal olarak değiştirildiDüğü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ğilimDocumentPositionMovement değerleri incelenmediBelirli 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 / EnumAçıklama
NodeEnumeratorIEnumerator<Node> / IDocumentPositionListener for-each yinelemesinin arkasındaki uygulama; Dispose(), Reset()
DocumentPositionMovementGezi 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

Ayrıca Bakınız

 Türkçe