Aspose.Words Dokument Voorwerp Model (DOM)

Die Aspose.Words Document Object Model (DOM) is’n in-geheue voorstelling van’n Word dokument. Met die Aspose.Words DOM kan u die inhoud en formatering van’n Word-dokument programmaties lees, manipuleer en verander.

Hierdie afdeling beskryf die hoofklasse van die Aspose.Words DOM en hul verhoudings. Deur die Aspose.Words DOM klasse te gebruik, kan jy programmatiese toegang tot dokumentelemente en formatering verkry.

Skep’n Document Voorwerpe Boom

Wanneer’n dokument in die Aspose.Words DOM gelees word, dan word’n voorwerp boom gebou en verskillende tipes elemente van die bron dokument het hul eie DOM boom voorwerpe met verskillende eienskappe.

Bou Dokument Nodes Boom

Wanneer Aspose.Words ‘n Word-dokument in die geheue lees, skep dit voorwerpe van verskillende tipes wat verskillende dokumentelemente verteenwoordig. Elke reeks van’n teks, paragraaf, tabel, of’n afdeling is’n knoop, en selfs die dokument self is’n knoop. Aspose.Words definieer’n klas vir elke dokument node tipe.

Die dokument boom in Aspose.Words volg die Saamgestelde Ontwerp Patroon:

  • Alle knoop klasse uiteindelik afgelei van die Node klas, wat is die basis klas in die Aspose.Words Dokument Voorwerp Model.
  • Knope wat ander knope kan bevat, byvoorbeeld Section of Paragraph, is afgelei van die CompositeNode klas, wat op sy beurt afgelei is van die Node klas.

Die diagram hieronder toon oorerwing tussen knoop klasse van die Aspose.Words Dokument Voorwerp Model (DOM). Die name van abstrakte klasse is in Kursief.

aspose-words-dom

Kom ons kyk na’n voorbeeld. Die volgende prent toon’n Microsoft Word dokument met verskillende soorte inhoud.

document-example-aspose-words

Wanneer die bogenoemde dokument in die Aspose.Words DOM gelees word, word die boom van voorwerpe geskep, soos in die skema hieronder getoon.

dom-aspose-words

Document, Section, Paragraph, Table, Shape, Run, en al die ander ellipses op die diagram is Aspose.Words voorwerpe wat elemente van die Word-dokument verteenwoordig.

Kry’n Node Tipe

Alhoewel die Node klas voldoende is om verskillende nodusse van mekaar te onderskei, bied Aspose.Words die NodeType opsomming om sommige API take te vereenvoudig, soos die keuse van nodusse van’n spesifieke tipe.

Die tipe van elke knoop kan verkry word deur die Node.node_type eienskap te gebruik. Hierdie eienskap gee’n NodeType opsomming waarde. Byvoorbeeld, ‘n paragraaf knoop verteenwoordig deur die Paragraph klas gee terug NodeType.PARAGRAPH, en’n tabel knoop verteenwoordig deur die Table klas gee terug NodeType.TABLE.

Die volgende voorbeeld toon hoe om’n knoop tipe te kry met behulp van die NodeType opsomming:

Dokument Boom Navigasie

Aspose.Words verteenwoordig’n dokument as’n node boom, wat jou in staat stel om te navigeer tussen nodes. Hierdie afdeling beskryf hoe om die dokument boom in Aspose.Words te verken en te navigeer.

As u die voorbeelddokument oopmaak, wat vroeër in Die Document Explorer aangebied is, verskyn die knoopboom presies soos dit in Aspose.Words voorgestel word.

document-in-document-explorer

Dokument Nodes Verhoudings

Die nodusse in die boom het verhoudings tussen hulle:

  • ‘n node wat’n ander node bevat is’n parent.
  • Die knoop wat in die ouer knoop is’n child. Kind nodes van dieselfde ouer is sibling nodes.
  • Die root knoop is altyd die Document knoop.

Die nodusse wat ander nodusse kan bevat, is afgelei van die CompositeNode klas, en alle nodusse is uiteindelik afgelei van die Node klas. Hierdie twee basis klasse bied gemeenskaplike metodes en eienskappe vir die boom struktuur navigasie en verandering.

Die volgende UML voorwerp diagram toon verskeie nodusse van die voorbeeld dokument en hul verhoudings met mekaar via die ouer, kind, en broer eienskappe:

document-nodes-relationships-aspose-words

Dokument Is Node Eienaar

‘n knoppie behoort altyd aan’n spesifieke dokument, selfs al is dit net geskep of verwyder uit die boom, omdat belangrike dokument-wye strukture soos style en lyste in die Document knoppie gestoor word. Dit is byvoorbeeld nie moontlik om’n Paragraph sonder’n Document te hê nie, want elke paragraaf het’n toegewyde styl wat wêreldwyd vir die dokument gedefinieer is. Hierdie reël word gebruik wanneer enige nuwe nodusse geskep word. Die toevoeging van’n nuwe Paragraph direk aan die DOM vereis’n dokument voorwerp wat aan die konstruktor.

Wanneer die skep van’n nuwe paragraaf met behulp van DocumentBuilder, die bouer het altyd’n Document klas gekoppel aan dit deur die DocumentBuilder.document eiendom.

Die volgende kode voorbeeld toon dat wanneer die skep van enige node, ‘n dokument wat die node sal besit altyd gedefinieer:

Ouerknooppunt

Elke knoop het’n ouer wat deur die parent_node eienskap gespesifiseer word. ‘n knoppie het geen ouer knoppie nie, dit wil sê, parent_node is None, in die volgende gevalle:

  • Die knoop is pas geskep en is nog nie by die boom gevoeg nie.
  • Die knoop is van die boom verwyder.
  • Dit is die wortel Document knoop wat altyd’n geen ouer knoop het.

Jy kan’n knoop van sy ouer verwyder deur die Node.remove metode te bel.Die volgende kode voorbeeld toon hoe om toegang tot die ouer node:

Kind Knope

Die mees doeltreffende manier om toegang tot kind nodes van a CompositeNode is via die first_child en last_child eienskappe wat die eerste en laaste kind nodes, onderskeidelik terugkeer. As daar geen kind nodes, hierdie eienskappe terugkeer None.

CompositeNode bied ook die get_child_nodes versameling wat geïndekseerde of genommerde toegang tot die kind nodes moontlik maak. Die get_child_nodes metode gee’n lewendige versameling van nodes terug, wat beteken dat wanneer die dokument verander word, soos wanneer nodes verwyder of bygevoeg word, die get_child_nodes versameling outomaties opgedateer word.

As’n knoop geen kind het nie, dan gee die get_child_nodes metode’n leë versameling terug. Jy kan kyk of die CompositeNode bevat enige kind nodes met behulp van die has_child_nodes eiendom.

Die volgende kode voorbeeld toon hoe om onmiddellike kind nodes van a CompositeNode te tel met behulp van die enumerator wat deur die get_child_nodes versameling:

Broersknope

Jy kan die knoop wat onmiddellik voorafgaan of volg’n bepaalde knoop met behulp van die previous_sibling en next_sibling eienskappe, onderskeidelik. As’n knoop die laaste kind van sy ouer is, dan is die next_sibling eienskap None. Omgekeerd, as die knoop die eerste kind van sy ouer is, is die previous_sibling eienskap None.

Die volgende kode voorbeeld toon hoe om doeltreffend te besoek al direkte en indirekte kind nodes van’n saamgestelde node:

Getikte Toegang Tot Kind En Ouer Nodes

Tot dusver het ons die eienskappe bespreek wat een van die basis tipes – Node of CompositeNode teruggee. Maar soms is daar situasies waar jy dalk waardes moet gooi na’n spesifieke knoop klas, soos Run of Paragraph. Dit wil sê, jy kan nie heeltemal wegkom van giet wanneer jy met die Aspose.Words DOM werk nie, wat saamgestel is.

Om die behoefte aan giet te verminder, die meeste Aspose.Words klasse bied eienskappe en versamelings wat sterk getik toegang bied. Daar is drie basiese patrone van getikte toegang:

Getypeerde eienskappe is bloot nuttige kortpaaie wat soms makliker toegang bied as generiese eienskappe wat van Node.parent_node en CompositeNode.first_child geërf word.

Die volgende kode voorbeeld toon hoe om getik eienskappe gebruik om toegang tot nodes van die dokument boom: