Aspose.Words Document Object Model (DOM)
Aspose.Words Document Object Model (DOM) adalah representasi dokumen Word dalam memori. Aspose.Words DOM memungkinkan Anda membaca, memanipulasi, dan memodifikasi konten dan format dokumen Word secara terprogram.
Bagian ini menjelaskan kelas utama Aspose.Words DOM dan hubungannya. Dengan menggunakan kelas Aspose.Words DOM, Anda bisa mendapatkan akses terprogram ke elemen dan pemformatan dokumen.
Buat {#create-a-document-objects-tree} Pohon Objek Document
Ketika sebuah dokumen dibaca ke dalam Aspose.Words DOM, maka pohon objek dibangun dan berbagai jenis elemen dokumen sumber memiliki objek pohon DOM sendiri dengan berbagai properti.
Bangun Pohon Node Dokumen
Saat Aspose.Words membaca dokumen Word ke dalam memori, Aspose.Words membuat objek dengan tipe berbeda yang mewakili berbagai elemen dokumen. Setiap rangkaian teks, paragraf, tabel, atau bagian adalah sebuah simpul, dan bahkan dokumen itu sendiri adalah sebuah simpul. Aspose.Words mendefinisikan kelas untuk setiap tipe node dokumen.
Pohon dokumen di Aspose.Words mengikuti Pola Desain Komposit:
- Semua kelas node pada akhirnya berasal dari kelas Node, yang merupakan kelas dasar dalam Document Object Model Aspose.Words.
- Node yang dapat berisi node lain, misalnya Section atau Paragraph, berasal dari kelas CompositeNode, yang selanjutnya berasal dari kelas Node.
Diagram di bawah ini menunjukkan pewarisan antar kelas node Aspose.Words Document Object Model (DOM). Nama kelas abstrak dicetak miring.
Mari kita lihat sebuah contoh. Gambar berikut menunjukkan dokumen Microsoft Word dengan tipe konten berbeda.
Saat membaca dokumen di atas ke dalam Aspose.Words DOM, pohon objek dibuat, seperti yang ditunjukkan pada skema di bawah ini.
Document, Section, Paragraph, Table, Shape, Run, dan semua elips lainnya pada diagram adalah objek Aspose.Words yang mewakili elemen dokumen Word.
Dapatkan Node
Tipe
Meskipun kelas Node cukup memadai untuk membedakan node yang berbeda satu sama lain, Aspose.Words menyediakan enumerasi NodeType untuk menyederhanakan beberapa tugas API, seperti memilih node dengan tipe tertentu.
Jenis setiap node dapat diperoleh dengan menggunakan properti Node.node_type. Properti ini mengembalikan nilai enumerasi NodeType. Misalnya, node paragraf yang diwakili oleh kelas Paragraph mengembalikan NodeType.PARAGRAPH, dan node tabel yang diwakili oleh kelas Table mengembalikan NodeType.TABLE.
Contoh berikut menunjukkan cara mendapatkan tipe node menggunakan enumerasi NodeType:
Navigasi Pohon Dokumen
Aspose.Words mewakili dokumen sebagai pohon simpul, yang memungkinkan Anda bernavigasi antar 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.
Hubungan Node Dokumen
Node-node pada pohon mempunyai hubungan di antara mereka:
- Sebuah node yang berisi node lain adalah parent.
- Node yang terdapat pada node induk adalah child. Node anak dari induk yang sama adalah node sibling.
- Node root selalu merupakan node 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 memperlihatkan beberapa node dari dokumen sampel dan hubungannya satu sama lain melalui properti induk, anak, dan saudara:
Dokumen adalah Pemilik Node
Sebuah node selalu menjadi milik dokumen tertentu, meskipun baru saja dibuat atau dihapus dari pohon, karena struktur penting seluruh dokumen seperti gaya dan daftar disimpan di node Document. Misalnya, tidak mungkin memiliki Paragraph tanpa Document karena setiap paragraf memiliki gaya yang ditentukan 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, pembuatnya selalu memiliki kelas Document yang ditautkan melalui properti DocumentBuilder.document.
Contoh kode berikut menunjukkan bahwa saat membuat node apa pun, dokumen yang akan memiliki node tersebut selalu ditentukan:
Node Induk
Setiap node memiliki induk yang ditentukan oleh properti parent_node. Sebuah node tidak memiliki node induk, yaitu parent_node adalah None, dalam kasus berikut:
- Node baru saja dibuat dan belum ditambahkan ke pohon.
- Node telah dihapus dari pohon.
- Ini adalah node root Document yang selalu memiliki node induk Tidak Ada.
Anda dapat menghapus sebuah node dari induknya dengan memanggil metode Node.remove. Contoh kode berikut menunjukkan cara mengakses node induk:
Node Anak
Cara paling efisien untuk mengakses node anak CompositeNode adalah melalui properti first_child dan last_child yang masing-masing mengembalikan node anak pertama dan terakhir. Jika tidak ada node anak, properti ini mengembalikan None.
CompositeNode juga menyediakan koleksi get_child_nodes yang memungkinkan akses yang diindeks atau dihitung ke node anak. Metode get_child_nodes mengembalikan kumpulan node yang aktif, yang berarti setiap kali dokumen diubah, misalnya saat node dihapus atau ditambahkan, koleksi dapatkan_child_nodes secara otomatis diperbarui.
Jika sebuah node tidak memiliki anak, maka metode dapatkan_child_nodes mengembalikan koleksi kosong. Anda dapat memeriksa apakah CompositeNode berisi node anak menggunakan properti has_child_nodes.
Contoh kode berikut menunjukkan cara menghitung node anak langsung dari CompositeNode menggunakan enumerator yang disediakan oleh koleksi dapatkan_child_nodes:
Node Saudara
Anda bisa mendapatkan node yang mendahului atau mengikuti node tertentu menggunakan properti previous_sibling dan next_sibling. Jika sebuah node adalah anak terakhir dari induknya, maka properti next_sibling adalah None. Sebaliknya, jika node adalah anak pertama dari induknya, properti previous_sibling-nya adalah None.
Contoh kode berikut menunjukkan cara mengunjungi semua node turunan langsung dan tidak langsung dari node komposit secara efisien:
Akses yang Diketik 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 node 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 yang diketik dengan kuat. Ada tiga pola dasar akses yang diketik:
- Node induk memperlihatkan properti pertama_XXX dan terakhir_XXX yang diketik. Misalnya, Document memiliki properti first_section dan last_section. Begitu pula Table yang memiliki properti seperti first_row, last_row, dan lain-lain.
- Node induk memperlihatkan kumpulan node anak yang diketik, seperti Document.sections, Body.paragraphs, dan lainnya.
- Node anak memberikan akses yang diketik ke induknya, seperti Run.parent_paragraph, Paragraph.parent_section, dan lainnya.
Properti yang diketik hanyalah pintasan berguna yang terkadang memberikan akses lebih mudah daripada properti umum yang diwarisi dari Node.parent_node dan CompositeNode.first_child.
Contoh kode berikut menunjukkan cara menggunakan properti yang diketik untuk mengakses node pohon dokumen: