Aspose.Words Document Object Model (DOM)

De Aspose.Words Document Object Model (DOM) is een in-geheugen weergave van een Word document. De Aspose.Words DOM kunt u programmatisch lezen, manipuleren en wijzigen van de inhoud en het formatteren van een Word-document.

In dit deel worden de belangrijkste klassen van de Aspose.Words DOM en hun relaties. Door Aspose.Words DOM klassen, kunt u programmatische toegang tot document elementen en opmaak verkrijgen.

Document aanmaken Objectboom

Wanneer een document wordt gelezen in de Aspose.Words DOM dan wordt een objectboom gebouwd en verschillende soorten elementen van het brondocument hebben hun eigen DOM boom objecten met verschillende eigenschappen.

Documentnodesboom bouwen

Wanneer Aspose.Words leest een Word-document in het geheugen, het creëert objecten van verschillende soorten die verschillende documentelementen vertegenwoordigen. Elke run van een tekst, paragraaf, tabel, of sectie is een knooppunt, en zelfs het document zelf is een knooppunt. Aspose.Words definieert een klasse voor elk documentnodetype.

De documentboom in Aspose.Words volgt het samengestelde ontwerppatroon:

  • Alle knooppunt klassen uiteindelijk afkomstig van de Node klasse, dat is de basisklasse in de Aspose.Words Document Object Model.
  • Knooppunten die andere knopen kunnen bevatten, bijvoorbeeld, Section of Paragraph, de CompositeNode klasse, die op zijn beurt voortvloeit uit de Node Klasse.

Het onderstaande diagram toont de erfenis tussen de knooppuntklassen van de Aspose.Words Document Object Model (DOM). De namen van abstracte klassen zijn in cursief.

aspose-words-dom

Laten we naar een voorbeeld kijken. De volgende afbeelding toont een Microsoft Word document met verschillende soorten inhoud.

document-example

Bij het lezen van het bovenstaande document in het Aspose.Words DOM, de boom van objecten is gemaakt, zoals getoond in het schema hieronder.

document-example-dom

Document, Section, Paragraph, Table, Shape, Run, en alle andere ellipsen op het diagram zijn Aspose.Words objecten die elementen van het Word-document weergeven.

Haal een Node Type

Hoewel de Node klasse is voldoende om verschillende knooppunten van elkaar te onderscheiden; Aspose.Words levert de NodeType Lijst ter vereenvoudiging van sommige API taken, zoals het selecteren van knooppunten van een specifiek type.

Het type van elke knoop kan worden verkregen met behulp van de NodeType eigendom. Deze eigenschap geeft een NodeType Waarde van de opsomming. Een paragraaf die bijvoorbeeld door de Paragraph klasse geeft terug NodeType.Paragraph, en een tabel knooppunt vertegenwoordigd door de Table klasse geeft terug NodeType.Table.

Het volgende voorbeeld laat zien hoe u een knooppunttype met behulp van de NodeType Lijst:

Documentboomnavigatie

Aspose.Words vertegenwoordigt een document als een knooppunt boom, waarmee u kunt navigeren tussen knooppunten. Deze sectie beschrijft hoe u de documentboom kunt verkennen en navigeren in Aspose.Words.

Wanneer u het sample document, eerder gepresenteerd, in de Document Explorer, de knooppunt boom verschijnt precies zoals het is weergegeven in Aspose.Words.

document-in-document-explorer

Documentknooppuntrelaties

De knooppunten in de boom hebben relaties tussen hen:

  • Een knoop met een andere knoop is een parent.
  • Het knooppunt in het ouderknooppunt is een child. Kindknooppunten van dezelfde ouder zijn sibling knooppunten.
  • De root knooppunt is altijd de Document Node.

De knooppunten die andere knooppunten kunnen bevatten zijn afkomstig van de CompositeNode klasse, en alle knooppunten uiteindelijk afkomstig zijn van de Node Klasse. Deze twee basisklassen bieden gemeenschappelijke methoden en eigenschappen voor de navigatie en modificatie van de boomstructuur.

Het volgende UML object diagram toont verschillende knooppunten van het monsterdocument en hun relaties met elkaar via de ouder, kind en broer eigenschappen:

document-nodes-relationships

Document is Node-eigenaar

Een knooppunt behoort altijd tot een bepaald document, zelfs als het net is gemaakt of verwijderd van de boom, omdat vitale document-brede structuren zoals stijlen en lijsten worden opgeslagen in de Document Node. Het is bijvoorbeeld niet mogelijk om een Paragraph zonder een Document omdat elke alinea een toegewezen stijl heeft die wereldwijd voor het document wordt gedefinieerd. Deze regel wordt gebruikt bij het aanmaken van nieuwe nodes. Een nieuw toevoegen Paragraph rechtstreeks naar de DOM vereist een document object doorgegeven aan de constructeur.

Bij het aanmaken van een nieuwe paragraaf DocumentBuilder, de bouwer heeft altijd een Document klasse verbonden aan het via de DocumentBuilder.Document eigendom.

Het volgende voorbeeld toont aan dat bij het aanmaken van een node, een document dat eigenaar van de node is altijd wordt gedefinieerd:

Ouderknooppunt

Elke knooppunt heeft een ouder gespecificeerd door de ParentNode eigendom. Een knooppunt heeft geen oudernode, dat wil zeggen, ParentNode nul is, in de volgende gevallen:

  • Het knooppunt is net aangemaakt en is nog niet aan de boom toegevoegd.
  • Het knooppunt is uit de boom verwijderd.
  • Dit is de root Document knooppunt dat altijd een nul ouder knooppunt heeft.

U kunt een knooppunt verwijderen van de ouder door de Remove methode. Het volgende voorbeeld van code laat zien hoe toegang te krijgen tot het ouderknooppunt:

Kindknooppunten

De meest efficiënte manier om toegang te krijgen tot kinderknooppunten van een CompositeNode via de FirstChild en LastChild eigenschappen die respectievelijk de eerste en laatste kindknooppunten teruggeven. Als er geen kindknooppunten zijn, keren deze eigenschappen terug null.

CompositeNode de ChildNodes collectie die geïndexeerde of genummerde toegang tot de kindknooppunten mogelijk maakt. De ChildNodes eigenschap is een levende verzameling van knooppunten, wat betekent dat wanneer het document wordt gewijzigd, zoals wanneer knooppunten worden verwijderd of toegevoegd, de ChildNodes collectie wordt automatisch bijgewerkt.

Als een knooppunt geen kind heeft, dan de ChildNodes eigendom geeft een lege verzameling terug. U kunt controleren of de CompositeNode bevat elke kind knooppunten met behulp van de HasChildNodes eigendom.

Het volgende voorbeeld van code laat zien hoe direct kind knooppunten van een CompositeNode gebruik makend van de door de ChildNodes verzameling:

Het volgende voorbeeld van code laat zien hoe direct kind knooppunten van een CompositeNode gebruik van geïndexeerde toegang:

Verwante nodes

U kunt de knoop die onmiddellijk voor of volgt een bepaald knooppunt met behulp van de PreviousSibling en NextSibling eigenschappen, respectievelijk. Als een knooppunt is het laatste kind van zijn ouder, dan de NextSibling eigenschap is null. Omgekeerd, als de knoop is het eerste kind van zijn ouder, de PreviousSibling eigenschap is null.

Het volgende voorbeeld van code laat zien hoe je alle directe en indirecte kindknooppunten van een samengesteld knooppunt efficiënt kunt bezoeken:

Getypte toegang tot kinder- en ouderknooppunten

Tot nu toe hebben we de eigenschappen besproken die een van de basistypen teruggeven. Node of CompositeNode. Maar soms zijn er situaties waarin je misschien waarden naar een specifieke knooppuntklasse moet casten, zoals Run of Paragraph. Dat wil zeggen, je kunt niet helemaal weg van casting bij het werken met de Aspose.Words DOM, dat is samengesteld.

Om de behoefte aan gietgieten te verminderen, Aspose.Words klassen bieden eigenschappen en collecties die sterk getypte toegang bieden. Er zijn drie basispatronen van getypte toegang:

Getypte eigenschappen zijn slechts nuttige snelkoppelingen die soms gemakkelijker toegang bieden dan generieke eigenschappen die zijn geërfd van Node.ParentNode en CompositeNode.FirstChild.

Het volgende voorbeeld van code laat zien hoe getypte eigenschappen gebruikt kunnen worden om toegang te krijgen tot knooppunten van de documentboom: