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 Dokument Voorwerp 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 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-aspose-words-cpp

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

document-example-aspose-words-cpp

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

document-example-dom-aspose-words-cpp

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 NodeType eienskap te gebruik. Hierdie eienskap gee’n NodeType enumeration value. For example, a paragraph node represented by the Paragraph class returns NodeType.Paragraph, en’n tabel knoop verteenwoordig deur die Table class returns 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-aspose-words-cpp

Dokument Node 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-cpp

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 ParentNode eienskap gespesifiseer word. ‘n knoppie het geen ouer knoppie nie, dit wil sê, ParentNode is nul, 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 nul ouer knoop het.

Jy kan’n knoop van sy ouer verwyder deur die 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 FirstChild en LastChild eienskappe wat die eerste en laaste kind nodes, onderskeidelik terugkeer. As daar geen kind nodes, hierdie eienskappe terugkeer null.

CompositeNode

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

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

Die volgende kode voorbeeld toon hoe om onmiddellike kind nodes van’n CompositeNode te tel met behulp van geïndekseerde toegang:

Broersknope

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

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-getyp 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.ParentNode en CompositeNode.FirstChild geërf word.

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