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.

asumsi-kata-dom

Mari kita lihat sebuah contoh. Gambar berikut menunjukkan dokumen Microsoft Word dengan tipe konten berbeda.

dokumen-contoh-aspose-kata-kata

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

kata-kata dom-aspose

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 NodeType. 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.

penjelajahan dokumen-dalam-dokumen

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-node-hubungan-aspose-kata-kata

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 ParentNode. Sebuah node tidak memiliki node induk, yaitu ParentNode adalah null, 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 nol.

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

Node Anak

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

CompositeNode juga menyediakan metode GetChildNodes yang memungkinkan akses yang diindeks atau dihitung ke node anak. Properti ChildNodes adalah kumpulan node yang aktif, artinya setiap kali dokumen diubah, misalnya saat node dihapus atau ditambahkan, koleksi ChildNodes secara otomatis diperbarui.

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

Contoh kode berikut menunjukkan cara menghitung node anak langsung dari CompositeNode menggunakan enumerator yang disediakan oleh koleksi ChildNodes:

Contoh kode berikut menunjukkan cara menghitung node anak langsung dari CompositeNode menggunakan akses yang diindeks:

Node Saudara

Anda bisa mendapatkan node yang mendahului atau mengikuti node tertentu menggunakan properti PreviousSibling dan NextSibling. Jika sebuah node adalah anak terakhir dari induknya, maka properti NextSiblingnya adalah null. Sebaliknya, jika node adalah anak pertama dari induknya, properti PreviousSibling-nya adalah null.

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:

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 pohon dokumen: