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 CompositeNode sınıfı da Node sınıfından türetilir.
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.
Bir örneğe bakalım. Aşağıdaki resimde farklı içerik türlerine sahip bir Microsoft Word belgesi gösterilmektedir.
Yukarıdaki belge Aspose.Words DOM’ye okunurken aşağıdaki şemada gösterildiği gibi nesneler ağacı oluşturulur.
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ü Node.node_type ö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‘i döndürür ve Table sınıfı tarafından temsil edilen bir tablo düğümü NodeType.TABLE‘yi 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 Düğümleri İ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:
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 parent_node özelliği tarafından belirtilen bir ebeveyni vardır. Aşağıdaki durumlarda bir düğümün üst düğümü yoktur, yani parent_node None‘dir:
- Düğüm yeni oluşturuldu ve henüz ağaca eklenmedi.
- Düğüm ağaçtan kaldırıldı.
- Bu, her zaman Hiçbiri üst düğümüne sahip olan kök Document düğümüdür.
Node.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 first_child ve last_child özellikleridir. Alt düğüm yoksa bu özellikler None değerini döndürür.
CompositeNode ayrıca alt düğümlere dizinlenmiş veya numaralandırılmış erişim sağlayan get_child_nodes koleksiyonunu da sağlar. get_child_nodes yöntemi, düğümlerin canlı bir koleksiyonunu döndürür; bu, düğümlerin kaldırılması veya eklenmesi gibi belgede her değişiklik yapıldığında get_child_nodes koleksiyonunun otomatik olarak güncellendiği anlamına gelir.
Bir düğümün çocuğu yoksa get_child_nodes yöntemi boş bir koleksiyon döndürür. has_child_nodes özelliğini kullanarak CompositeNode‘nin herhangi bir alt düğüm içerip içermediğini kontrol edebilirsiniz.
Aşağıdaki kod örneği, get_child_nodes 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:
Kardeş Düğümler
Sırasıyla previous_sibling ve next_sibling özelliklerini kullanarak belirli bir düğümden hemen önce veya sonra gelen düğümü elde edebilirsiniz. Bir düğüm ebeveyninin son çocuğuysa, next_sibling özelliği None‘dir. Tersine, eğer düğüm ebeveyninin ilk çocuğu ise previous_sibling özelliği None‘dir.
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:
- Bir üst düğüm, yazılan ilk_XXX ve son_XXX özelliklerini ortaya çıkarır. Örneğin Document‘in first_section ve last_section özellikleri vardır. Benzer şekilde Table‘nin first_row, last_row ve diğerleri gibi özellikleri vardır.
- Bir üst düğüm, Document.sections, Body.paragraphs ve diğerleri gibi alt düğümlerin yazılı bir koleksiyonunu ortaya çıkarır.
- Bir alt düğüm, Run.parent_paragraph, Paragraph.parent_section ve diğerleri gibi üst düğümüne yazılı erişim sağlar.
Yazılan özellikler, bazen Node.parent_node ve CompositeNode.first_child‘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: