Aspose.Words Model Objek Dokumen (DOM)

Model Objek Dokumen Aspose.Words (DOM) adalah representasi dalam memori dari dokumen Word. Aspose.Words DOM memungkinkan Anda membaca, memanipulasi, dan memodifikasi konten dan pemformatan dokumen Word secara terprogram.

Bagian ini menjelaskan kelas utama dari Aspose.Words DOM dan hubungannya. Dengan menggunakan kelas Aspose.Words DOM, Anda dapat memperoleh akses terprogram ke elemen dokumen dan pemformatan.

Buat Pohon Objek Dokumen

Ketika sebuah dokumen dibaca ke dalam Aspose.Words DOM, maka pohon objek dibuat dan berbagai jenis elemen dokumen sumber memiliki objek pohon DOM sendiri dengan berbagai properti.

Bangun Pohon Simpul Dokumen

Saat Aspose.Words membaca dokumen Word ke dalam memori, dokumen tersebut membuat objek dari berbagai jenis yang mewakili berbagai elemen dokumen. Setiap proses teks, paragraf, tabel, atau bagian adalah sebuah simpul, dan bahkan dokumen itu sendiri adalah sebuah simpul. Aspose.Words mendefinisikan kelas untuk setiap jenis simpul dokumen.

Pohon dokumen dalam Aspose.Words mengikuti Pola Desain Komposit:

  • Semua kelas simpul pada akhirnya berasal dari kelas Node, yang merupakan kelas dasar dalam Model Objek Dokumen Aspose.Words.
  • Node yang dapat berisi node lain, misalnya, Section atau Paragraph, diturunkan dari kelas CompositeNode, yang pada gilirannya diturunkan dari kelas Node.

Diagram yang disediakan di bawah ini menunjukkan pewarisan antara kelas simpul dari Model Objek Dokumen Aspose.Words (DOM). Nama-nama kelas abstrak dicetak miring.

aspose-words-dom-aspose-words-cpp

Mari kita lihat sebuah contoh. Gambar berikut menunjukkan dokumen Microsoft Word dengan berbagai jenis konten.

document-example-aspose-words-cpp

Saat membaca dokumen di atas ke dalam Aspose.Words DOM, pohon objek dibuat, seperti yang ditunjukkan pada skema di bawah ini.

document-example-dom-aspose-words-cpp

Document, Section, Paragraph, Table, Shape, Run, dan semua elips lain pada diagram adalah objek Aspose.Words yang mewakili elemen dokumen Word.

Dapatkan Tipe Node

Meskipun kelas Node cukup memadai untuk membedakan node yang berbeda satu sama lain, Aspose.Words menyediakan pencacahan NodeType untuk menyederhanakan beberapa tugas API, seperti memilih node dari tipe tertentu.

Jenis setiap simpul dapat diperoleh dengan menggunakan properti NodeType. Properti ini mengembalikan NodeType enumeration value. For example, a paragraph node represented by the Paragraph class returns NodeType.Paragraph, dan simpul tabel yang diwakili oleh Table class returns NodeType.Table.

Contoh berikut menunjukkan cara mendapatkan tipe simpul menggunakan enumerasi NodeType:

Navigasi Pohon Dokumen

Aspose.Words merepresentasikan dokumen sebagai pohon simpul, yang memungkinkan Anda bernavigasi di antara simpul. Bagian ini menjelaskan cara menjelajahi dan menavigasi pohon dokumen di Aspose.Words.

Saat Anda membuka dokumen sampel, yang disajikan sebelumnya, di Penjelajah Dokumen, pohon simpul muncul persis seperti yang direpresentasikan dalam Aspose.Words.

document-in-document-explorer-aspose-words-cpp

Hubungan Simpul Dokumen

Simpul-simpul di pohon memiliki hubungan di antara mereka:

  • Sebuah simpul yang berisi simpul lain adalah parent.
  • Simpul yang terdapat dalam simpul induk adalah child. Simpul turunan dari induk yang sama adalah sibling simpul.
  • Simpul root selalu merupakan simpul Document.

Node yang dapat berisi node lain berasal dari kelas CompositeNode, dan semua node pada akhirnya berasal dari kelas Node. Kedua kelas dasar ini menyediakan metode dan properti umum untuk navigasi dan modifikasi struktur pohon.

Diagram objek UML berikut menunjukkan beberapa simpul dari dokumen sampel dan hubungannya satu sama lain melalui properti induk, turunan, dan saudara kandung:

document-nodes-relationships-aspose-words-cpp

Dokumen adalah Pemilik Simpul

Sebuah simpul selalu menjadi milik dokumen tertentu, meskipun baru saja dibuat atau dihapus dari hierarki, karena struktur penting di seluruh dokumen seperti gaya dan daftar disimpan di simpul Document. Misalnya, tidak mungkin memiliki Paragraph tanpa Document karena setiap paragraf memiliki gaya yang ditetapkan yang didefinisikan secara global untuk dokumen tersebut. Aturan ini digunakan saat membuat node baru. Menambahkan Paragraph baru langsung ke DOM memerlukan objek dokumen yang diteruskan ke konstruktor.

Saat membuat paragraf baru menggunakan DocumentBuilder, pembuat selalu memiliki kelas Document yang ditautkan melalui properti DocumentBuilder.Document.

Contoh kode berikut menunjukkan bahwa saat membuat simpul apa pun, dokumen yang akan memiliki simpul selalu ditentukan:

Simpul Induk

Setiap node memiliki induk yang ditentukan oleh properti ParentNode. Sebuah simpul tidak memiliki simpul induk, yaitu, ParentNode adalah nol, dalam kasus berikut:

  • Simpul baru saja dibuat dan belum ditambahkan ke pohon.
  • Simpul telah dihapus dari pohon.
  • Ini adalah simpul root Document yang selalu memiliki simpul induk nol.

Anda dapat menghapus simpul dari induknya dengan memanggil metode Remove.Contoh kode berikut menunjukkan cara mengakses simpul induk:

Simpul Anak

Cara paling efisien untuk mengakses simpul turunan dari CompositeNode adalah melalui properti FirstChild dan LastChild yang masing-masing mengembalikan simpul turunan pertama dan terakhir. Jika tidak ada simpul turunan, properti ini mengembalikan null.

CompositeNode

Jika sebuah node tidak memiliki turunan, maka properti ChildNodes mengembalikan koleksi kosong. Anda dapat memeriksa apakah CompositeNode berisi simpul turunan apa pun menggunakan properti HasChildNodes.

Contoh kode berikut menunjukkan cara menghitung simpul turunan langsung dari CompositeNode menggunakan pencacah yang disediakan oleh koleksi ChildNodes:

Contoh kode berikut menunjukkan cara menghitung simpul turunan langsung dari CompositeNode menggunakan akses terindeks:

Node Saudara Kandung

Anda dapat memperoleh simpul yang segera mendahului atau mengikuti simpul tertentu masing-masing menggunakan properti PreviousSibling dan NextSibling. Jika sebuah simpul adalah turunan terakhir dari induknya, maka properti NextSibling adalah null. Sebaliknya, jika simpul adalah turunan pertama dari induknya, properti PreviousSibling adalah null.

Contoh kode berikut menunjukkan cara mengunjungi semua node turunan langsung dan tidak langsung dari node komposit secara efisien:

Mengetik Akses ke Node Anak dan Induk

Sejauh ini, kita telah membahas properti yang mengembalikan salah satu tipe dasar - Node atau CompositeNode. Namun terkadang ada situasi di mana Anda mungkin perlu memberikan nilai ke kelas simpul tertentu, seperti Run atau Paragraph. Artinya, Anda tidak dapat sepenuhnya melepaskan diri dari casting saat bekerja dengan Aspose.Words DOM, yang merupakan komposit.

Untuk mengurangi kebutuhan casting, sebagian besar kelas Aspose.Words menyediakan properti dan koleksi yang menyediakan akses bertipe kuat. Ada tiga pola dasar akses yang diketik:

Properti yang diketik hanyalah pintasan berguna yang terkadang memberikan akses lebih mudah daripada properti umum yang diwarisi dari Node.ParentNode dan CompositeNode.FirstChild.

Contoh kode berikut menunjukkan cara menggunakan properti yang diketik untuk mengakses node dari pohon dokumen: