Aspose.Words Document Object Model (DOM)

Aspose.Words Document Object Model (DOM), bir Word belgesi bellekteki gösterimidir. Aspose.Words DOM, programlı olarak bir Word belgesinin içeriğini ve biçimlendirilmesini okumanızı, manipüle etmenizi ve değiştirmenizi sağlar.

Bu bölüm Aspose.Words DOM’deki ana sınıfları ve ilişkilerini tanımlar. Aspose.Words DOM sınıflarını kullanarak bir belge öğelerine programlı erişim elde edebilirsiniz.

Create Document Object Tree

Bir belge Aspose.Words DOM içine alındığında, bir nesne ağacı oluşturulur ve kaynak belgedeki farklı türdeki öğelerin kendi DOM ağaç nesneleri çeşitli özelliklere sahiptir.

Yapı Doküman Düğüm Ağacı

Bir Word belgesi belleğe Aspose.Words tarafından okunduğunda, çeşitli belge öğelerini temsil eden farklı türde nesneler oluşturur. Her metin, paragraf, tablo veya bölüm çalıştırması bir düğüm ve hatta belge de bir düğümdür. Aspose.Words her belge düğümü türü için bir sınıf tanımlar.

Aspose.Words içindeki belge ağacı Kompozit Tasarım Deseni’ni takip eder:

Tüm düğüm sınıfları nihayetinde Node sınıfından türetilir, ki bu da Aspose.Words Document Object Model içindeki temel sınıftır.

  • Diğer düğümleri içerebilecek düğümler, örneğin Section veya Paragraph, CompositeNode sınıfından türetilirler, bu da Node sınıfından türeder.

Aşağıdaki diyagramda düğüm sınıfları arasındaki miras gösterilmektedir Aspose.Words Document Object Model (DOM). Soyut sınıfların isimleri italiktir.

aspose-words-dom

Örnek bir şeye bakalım. Aşağıdaki görüntü, farklı türdeki içeriklere sahip bir Microsoft Word belgesini göstermektedir.

document-example

Yukarıdaki belgeden Aspose.Words DOM okurken, nesne ağacı yukarıdaki şemada gösterildiği gibi oluşturulur.

document-example-dom

Document, Section, Paragraph, Table, Shape, Run, ve diyagramdaki diğer tüm elipsler Aspose.Words nesneleri Word belgesi öğelerini temsil eder.

Bir Node Tür

Node sınıfı birbirinden farklı düğümleri ayırt etmek için yeterli olsa da, Aspose.Words belirli türde düğümleri seçme gibi bazı API görevleri kolaylaştırmak için NodeType numaralandırma sağlar.

Her düğümün türü NodeType özelliğini kullanarak elde edilebilir. Bu özellik bir NodeType enum değeri döndürür. Örneğin, Paragraph sınıfıyla temsil edilen bir paragraf düğümü NodeType.Paragraph döndürür ve Table sınıfıyla temsil edilen bir tablo düğümü NodeType.Table döndürür.

Aşağıdaki örnek, bir düğüm türünü almak için NodeType numaralandırmasının nasıl kullanılacağını göstermektedir:

Belge Ağacı Gezintisi

Aspose.Words bir belgeden düğüm ağacı olarak temsil eder, bu da düğümler arasında gezinmenizi sağlar. Bu bölüm Aspose.Words’te belge ağacını keşfetme ve gezinti hakkında bilgi verir.

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

document-in-document-explorer

Belge Düğüm İlişkileri

Ağaçtaki düğümler aralarında ilişkiler içerir:

  • Bir başka bir düğüm içeren bir düğüm parent. ‘dir
  • Ana düğümde bulunan düğüm bir child. ‘dir. Aynı üst düğümün alt düğümleri sibling ‘dir.
  • root düğümü her zaman bir Document düğümüdür.

Diğer düğümleri içerebilecek düğümler CompositeNode sınıfından türemiş ve tüm düğümler nihai olarak Node sınıfından türemiştir. Bu iki temel sınıf ağaç yapısı gezintisi ve değişikliği için ortak yöntemler ve özellikleri sağlar.

Aşağıdaki UML nesne diyagramı örnek belgeyi oluşturan bir dizi düğüm ve bunların ebeveyn, çocuk ve kardeş özellikleri aracılığıyla birbirlerine olan ilişkilerini göstermektedir:

document-nodes-relationships

Belge Düğüm Sahibi

Bir düğüm her zaman belirli bir belgeye aittir, hatta sadece oluşturulmuş veya ağaçtan kaldırılmış olsa bile, çünkü stil ve listeler gibi önemli belge genelinde yapılar Document düğümüde saklanır. Örneğin, bir Paragraph olmadan bir Document olamaz çünkü her paragrafın atanmış bir stili vardır ki bu stil belge için genel olarak tanımlanmıştır. Bu kural yeni düğümler oluşturulurken kullanılır. Yeni bir Paragraph‘i doğrudan DOM’ye eklemek bir belge nesnesini oluşturucuya geçirmeyi gerektirir.

Bir yeni paragraf oluştururken DocumentBuilder kullanarak, oluşturucu her zaman Document sınıfına sahip olur ve DocumentBuilder.Document özelliğine göre ona bağlanır.

Aşağıdaki kod örneğinde herhangi bir düğüm oluştururken, sahip olacağı belge her zaman tanımlandığını göstermektedir:

Ebeveyn Düğüm

Her düğüm, bir ParentNode özelliğine sahip üst düğüme sahiptir. Bir düğümün hiçbir üst düğümü yoktur, yani ParentNode null’dur aşağıdaki durumlarda:

  • Düğüm sadece oluşturuldu ve ağaca henüz eklenmedi. Sürücü ağacıdan kaldırıldı.
  • Bu kök Document düğümü her zaman bir null üst düğüm.

Bir düğümü üst düğümünden çıkarabilirsiniz Remove yöntemini çağırarak. Aşağıdaki örnek kod, üst düğümüne erişmenin nasıl yapılacağını göstermektedir:

Çocuk Düğümleri

Bir CompositeNode nin alt düğümlerine erişmenin en verimli yolu, sırasıyla ilk ve son alt düğümü döndüren FirstChild ve LastChild özelliklerini kullanmaktır. Alt düğüm yoksa bu özellikler null‘ı döndürür.

CompositeNode ayrıca ChildNodes koleksiyonunu sağlar, böylece alt düğümlerin dizinli veya numaralandırılmış olarak erişilebilir. ChildNodes özelliği canlı bir düğümlere sahip bir koleksiyondur, bu da belgenin değiştirildiği, örneğin düğümlere kaldırıldığı veya eklendiği durumlarda, ChildNodes koleksiyonunun otomatik olarak güncelleneceği anlamına gelir.

Bir düğümün çocuğu yoksa, ChildNodes özelliği boş bir koleksiyon döndürür. CompositeNode içindeki herhangi bir alt düğüm olup olmadığını HasChildNodes özelliğini kullanarak kontrol edebilirsiniz.

Aşağıdaki kod örneği bir 0 CompositeNode kullanarak nasıl hemen alt düğümlerin listelenmesi gösterilir koleksiyon tarafından sağlanan ChildNodes ‘den bir enumerator kullanır.:

Aşağıdaki kod örneği, dizinli erişimi kullanarak bir CompositeNode‘ın anında çocuk düğümlerini nasıl saydığını göstermektedir:

Kardeş Düğümler

Bir belirli düğümün hemen öncesi veya sonraki düğümü elde etmek için sırasıyla PreviousSibling ve NextSibling özelliklerini kullanabilirsiniz. Bir düğüm, ebeveyni olan son çocuk ise, NextSibling özelliğinin değeri null‘dir. Tersine, bir düğüm ebeveynin ilk çocuğu ise, PreviousSibling özelliğinin değeri null ‘dir.

Aşağıdaki kod örneği, bileşik bir düğümün doğrudan ve dolaylı alt düğümlerini verimli bir şekilde ziyaret etmenin nasıl yapılacağını göstermektedir:

Çocuk ve Ana Düğümlerin Tipli Erişimi

Şu ana kadar, Node veya CompositeNode temel türlerden birini döndüren özellikleri tartıştık. Ancak bazen belirli bir düğüm sınıfı, örneğin Run veya Paragraph‘e değerleri dönüştürmeniz gerekebilir. Yani Aspose.Words ve DOM’le çalışırken tamamen dönüştürmeden vazgeçemezsiniz.

Kast etme ihtiyacını azaltmak için çoğu Aspose.Words sınıfı güçlü tür erişimi sağlayan özellikler ve koleksiyonlar sağlar. Üç temel tipli erişim deseni vardır:

Girdi özellikleri yalnızca bazen genel özelliklere göre daha kolay erişim sağlayan Node.ParentNode ve CompositeNode.FirstChild‘den devralınan yararlı kısayollerdir.

Aşağıdaki kod örneği, belgenin düğümlerine erişmek için tipli özellikleri nasıl kullanacağınızı göstermektedir: