Aspose.Words Document Object Model (DOM)

Aspose.Words Document Object Model (DOM), bir Word belgesinin bellek içi temsilidir. Aspose.Words DOM, bir Word belgesinin içeriğini ve biçimlendirmesini programlı olarak okumanıza, değiştirmenize ve değiştirmenize olanak tanır.

Bu bölümde Aspose.Words DOM’nin ana sınıfları ve bunların ilişkileri açıklanmaktadır. Aspose.Words DOM sınıflarını kullanarak belge öğelerine ve biçimlendirmeye programlı erişim sağlayabilirsiniz.

Document Nesne Ağacı {#create-a-document-objects-tree} Oluşturma

Bir belge Aspose.Words DOM’ye okunduğunda, bir nesne ağacı oluşturulur ve kaynak belgenin farklı türdeki öğeleri, çeşitli özelliklere sahip kendi DOM ağacı nesnelerine sahip olur.

Belge Düğümleri Ağacı {#build-document-nodes-tree} Oluşturun

Aspose.Words, bir Word belgesini belleğe okuduğunda, çeşitli belge öğelerini temsil eden farklı türde nesneler oluşturur. Bir metnin, paragrafın, tablonun veya bölümün her akışı bir düğümdür ve hatta belgenin kendisi de bir düğümdür. Aspose.Words, her belge düğümü türü için bir sınıf tanımlar.

Aspose.Words’teki belge ağacı, Bileşik Tasarım Modelini takip eder:

  • Tüm düğüm sınıfları sonuçta Aspose.Words Document Object Model’deki temel sınıf olan Node sınıfından türetilir.
  • Section veya Paragraph gibi diğer düğümleri içerebilen düğümler CompositeNode sınıfından türetilir ve bu da Node sınıfından türer.

Aşağıda verilen diyagram, Aspose.Words Document Object Model’nin (DOM) düğüm sınıfları arasındaki kalıtımı göstermektedir. Soyut sınıfların adları italiktir.

iddia-kelimeler-dom

Bir örneğe bakalım. Aşağıdaki resimde farklı içerik türlerine sahip bir Microsoft Word belgesi gösterilmektedir.

belge-örnek-aspose-kelimeler

Yukarıdaki belge Aspose.Words DOM’ye okunurken aşağıdaki şemada gösterildiği gibi nesneler ağacı oluşturulur.

dom-aspose-kelimeler

Document, Section, Paragraph, Table, Shape, Run ve diyagramdaki diğer tüm elipsler, Word belgesinin öğelerini temsil eden Aspose.Words nesneleridir.

Node Türü {#get-a-node-type}‘yi edinin

Node sınıfı, farklı düğümleri birbirinden ayırt edecek kadar yeterli olsa da, Aspose.Words, belirli bir türdeki düğümleri seçmek gibi bazı API görevlerini basitleştirmek için NodeType numaralandırması sağlar.

Her düğümün türü NodeType özelliği kullanılarak elde edilebilir. Bu özellik bir NodeType numaralandırma değeri döndürür. Örneğin, Paragraph sınıfı tarafından temsil edilen bir paragraf düğümü NodeType.Paragraph‘yi döndürür ve Table sınıfı tarafından temsil edilen bir tablo düğümü NodeType.Table‘i döndürür.

Aşağıdaki örnek, NodeType numaralandırmasını kullanarak bir düğüm türünün nasıl alınacağını gösterir:

Belge Ağacı Gezintisi

Aspose.Words, bir belgeyi düğümler arasında gezinmenizi sağlayan bir düğüm ağacı olarak temsil eder. Bu bölümde Aspose.Words’teki belge ağacının nasıl keşfedileceği ve gezinileceği açıklanmaktadır.

Daha önce sunulan örnek belgeyi Belge Gezgini’nde açtığınızda, düğüm ağacı tam olarak Aspose.Words’te temsil edildiği gibi görünür.

belge içinde belge gezgini

Belge Düğümü İlişkileri

Ağaçtaki düğümlerin kendi aralarında ilişkileri vardır:

  • Başka bir düğüm içeren bir düğüm parent.‘tir
  • Ana düğümün içerdiği düğüm bir child.‘tir. Aynı ebeveynin alt düğümleri sibling düğümleridir.
  • root düğümü her zaman Document düğümüdür.

Diğer düğümleri içerebilen düğümler CompositeNode sınıfından türetilir ve tüm düğümler sonuçta Node sınıfından türetilir. Bu iki temel sınıf, ağaç yapısında gezinme ve değişiklik için ortak yöntemler ve özellikler sağlar.

Aşağıdaki UML nesne diyagramı, örnek belgenin birkaç düğümünü ve bunların ebeveyn, alt ve kardeş özellikleri aracılığıyla birbirleriyle ilişkilerini gösterir:

belge-düğümleri-ilişkileri-aspose-kelimeler

Doküman Düğüm Sahibi

Bir düğüm, yeni oluşturulmuş veya ağaçtan kaldırılmış olsa bile her zaman belirli bir belgeye aittir, çünkü stiller ve listeler gibi belge genelindeki hayati yapılar Document düğümünde depolanır. Örneğin, Document olmadan bir Paragraph‘ye sahip olmak mümkün değildir çünkü her paragrafın, belge için genel olarak tanımlanmış atanmış bir stili vardır. Bu kural yeni düğümler oluşturulurken kullanılır. DOM’e doğrudan yeni bir Paragraph eklemek, yapıcıya bir belge nesnesinin aktarılmasını gerektirir.

DocumentBuilder kullanarak yeni bir paragraf oluştururken, oluşturucunun her zaman DocumentBuilder.Document özelliği aracılığıyla kendisine bağlı bir Document sınıfı vardır.

Aşağıdaki kod örneği, herhangi bir düğüm oluştururken, düğümün sahibi olacak bir belgenin her zaman tanımlandığını gösterir:

Ana Düğüm

Her düğümün ParentNode özelliği tarafından belirtilen bir ebeveyni vardır. Bir düğümün üst düğümü yoktur, yani aşağıdaki durumlarda ParentNode boştur:

  • Düğüm yeni oluşturuldu ve henüz ağaca eklenmedi.
  • Düğüm ağaçtan kaldırıldı.
  • Bu, her zaman boş bir üst düğüme sahip olan kök Document düğümüdür.

Remove yöntemini çağırarak bir düğümü üst öğesinden kaldırabilirsiniz. Aşağıdaki kod örneği, üst düğüme nasıl erişileceğini gösterir:

Çocuk Düğümler

Bir CompositeNode‘in alt düğümlerine erişmenin en etkili yolu, sırasıyla ilk ve son alt düğümleri döndüren FirstChild ve LastChild özellikleridir. Alt düğüm yoksa bu özellikler null değerini döndürür.

CompositeNode ayrıca alt düğümlere dizinlenmiş veya numaralandırılmış erişim sağlayan GetChildNodes yöntemini de sağlar. ChildNodes özelliği, düğümlerin canlı bir koleksiyonudur; bu, düğümlerin kaldırılması veya eklenmesi gibi belgede her değişiklik yapıldığında, ChildNodes koleksiyonunun otomatik olarak güncellendiği anlamına gelir.

Bir düğümün çocuğu yoksa ChildNodes özelliği boş bir koleksiyon döndürür. HasChildNodes özelliğini kullanarak CompositeNode‘nin herhangi bir alt düğüm içerip içermediğini kontrol edebilirsiniz.

Aşağıdaki kod örneği, ChildNodes koleksiyonu tarafından sağlanan numaralandırıcıyı kullanarak bir CompositeNode‘in hemen alt düğümlerinin nasıl numaralandırılacağını gösterir:

Aşağıdaki kod örneği, dizinlenmiş erişimi kullanarak bir CompositeNode‘in hemen alt düğümlerinin nasıl numaralandırılacağını gösterir:

Kardeş Düğümler

Sırasıyla PreviousSibling ve NextSibling özelliklerini kullanarak belirli bir düğümden hemen önce veya sonra gelen düğümü elde edebilirsiniz. Bir düğüm ebeveyninin son çocuğuysa NextSibling özelliği null‘tir. Tersine, eğer düğüm ebeveyninin ilk çocuğu ise PreviousSibling özelliği null‘tir.

Aşağıdaki kod örneği, bir bileşik düğümün tüm doğrudan ve dolaylı alt düğümlerinin verimli bir şekilde nasıl ziyaret edileceğini gösterir:

Alt ve Üst Düğümlere Yazılı Erişim

Şu ana kadar temel türlerden birini (Node veya CompositeNode) döndüren özellikleri tartıştık. Ancak bazen değerleri Run veya Paragraph gibi belirli bir düğüm sınıfına aktarmanız gerekebilecek durumlar olabilir. Yani kompozit olan Aspose.Words DOM ile çalışırken dökümden tamamen uzaklaşamazsınız.

Döküm ihtiyacını azaltmak için çoğu Aspose.Words sınıfı, güçlü bir şekilde yazılan erişim sağlayan özellikler ve koleksiyonlar sağlar. Yazılı erişimin üç temel modeli vardır:

Yazılan özellikler, bazen Node.ParentNode ve CompositeNode.FirstChild‘den devralınan genel özelliklere göre daha kolay erişim sağlayan yalnızca yararlı kısayollardır.

Aşağıdaki kod örneği, belge ağacının düğümlerine erişmek için yazılan özelliklerin nasıl kullanılacağını gösterir: