Aspose.Words Document Object Model (DOM)
De Aspose.Words Document Object Model (DOM) is een herinneringsrepresentatie van een Word-document. De Aspose.Words DOM Hiermee kunt u programmatisch de inhoud en opmaak van een Word-document lezen, manipuleren en wijzigen.
Dit deel beschrijft de belangrijkste klassen van de Aspose.Words DOM en hun relaties. Door het gebruik van de Aspose.Words DOM klassen, kunt u programmatische toegang tot document elementen en opmaak verkrijgen.
Aanmaken Document
Objectboom
Wanneer een document wordt gelezen in de Aspose.Words <span notrans="<span notrans=" DOM"="">,"> dan wordt er een objectboom gebouwd en hebben verschillende soorten elementen van het brondocument hun eigen DOM boomobjecten 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 een 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 knooppuntklassen komen uiteindelijk voort uit de Node klasse, dat is de basisklasse in de Aspose.Words Document Object Model.
- Knooppunten die andere knooppunten 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.
Node
Klasse.
Laten we naar een voorbeeld kijken. De volgende afbeelding toont een Microsoft Word document met verschillende soorten inhoud.
Bij het lezen van het bovenstaande document in de Aspose.Words DOM, de boom van objecten is gemaakt, zoals getoond in het schema hieronder.
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 je een knooppunt type 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 voorbeelddocument opent, dat eerder in de Document Explorer wordt getoond, verschijnt de knooppuntboom precies zoals deze is weergegeven in Aspose.Words.
Relaties tussen documentknooppunten
De knooppunten in de boom hebben relaties tussen hen:
- Een knooppunt met een ander knooppunt 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 monster document en hun relaties met elkaar via de ouder, kind en broer eigenschappen:
Document is Node-eigenaar
Een knooppunt behoort altijd tot een bepaald document, zelfs als het net is gemaakt of verwijderd uit 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 zojuist 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 kindknopen zijn, keren deze eigenschappen terug null.
CompositeNode de GetChildNodes methode die geïndexeerde of gespecificeerde 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 object geeft een lege verzameling terug. U kunt controleren of de CompositeNode bevat alle kindknooppunten 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 verkrijgen die onmiddellijk voorafgaat aan of een bepaald knooppunt volgt 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 efficiënt alle directe en indirecte kindknooppunten van een samengesteld knooppunt 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 knooppunt klasse, 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:
- Een oudernode onthult getypt FirstXXX en LastXXX eigenschappen. Zo is het Document heeft FirstSection en LastSection eigenschappen. Evenzo, Table heeft eigenschappen zoals FirstRow, LastRow, en anderen.
- Een ouder knooppunt onthult een getypte verzameling van kindknopen, zoals Document.Sections, Body.Paragraphs, en anderen.
- Een kind knooppunt biedt getypte toegang tot de ouder, zoals Run.ParentParagraph, Paragraph.ParentSection, en anderen.
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: