Aspose.Words Document Object Model (DOM)
Die Aspose.Words Document Object Model (DOM) ist eine in-memory Darstellung eines Word-Dokuments. Die Aspose.Words DOM ermöglicht es Ihnen, den Inhalt und die Formatierung eines Word-Dokuments programmatisch zu lesen, zu manipulieren und zu modifizieren.
Dieser Abschnitt beschreibt die Hauptklassen der Aspose.Words DOM und ihre Beziehungen. Durch die Verwendung Aspose.Words DOM Klassen, können Sie programmatischen Zugriff auf Dokumentelemente und Formatierung erhalten.
Dokument erstellen Objekt Baum
Wenn ein Dokument in die Aspose.Words <span notrans="<span notrans=" DOM"="">,"> dann wird ein Objektbaum gebaut und verschiedene Arten von Elementen des Quelldokuments haben ihre eigenen DOM Baumobjekte mit verschiedenen Eigenschaften.
Dokument Nodes Tree erstellen
Wann Aspose.Words liest ein Word-Dokument in den Speicher, es erstellt Objekte verschiedener Typen, die verschiedene Dokumentelemente darstellen. Jeder Ablauf eines Textes, Absatz, Tabelle oder Abschnitts ist ein Knoten und sogar das Dokument selbst ist ein Knoten. Aspose.Words definiert eine Klasse für jeden Dokumentknotentyp.
Der Dokumentbaum in Aspose.Words folgt dem Composite Design Muster:
- Alle Knotenklassen stammen letztlich von Node Klasse, die die Basisklasse in der Aspose.Words Document Object Model.
- Knoten, die zum Beispiel andere Knoten enthalten können Section oder Paragraph, von der CompositeNode Klasse, die wiederum von der Node Klasse.
Das nachfolgende Diagramm zeigt die Erbschaft zwischen Knotenklassen der Aspose.Words Document Object Model (DOM) Die Namen der abstrakten Klassen sind in Italics.
Node
Klasse.
Schauen wir uns ein Beispiel an. Das folgende Bild zeigt a Microsoft Word Dokument mit verschiedenen Arten von Inhalten.
Beim Lesen des obigen Dokuments in das Aspose.Words DOM, der Baum der Objekte wird erstellt, wie im Schema unten gezeigt.
Document, Section, Paragraph, Table, Shape, Run, und alle anderen Ellipsen auf dem Diagramm sind Aspose.Words Objekte, die Elemente des Word-Dokuments darstellen.
Holt euch! Node
Typ
Obwohl Node Klasse ausreichend ist, um verschiedene Knoten voneinander zu unterscheiden, Aspose.Words bietet NodeType Aufzählung, um einige zu vereinfachen API Aufgaben, wie die Auswahl von Knoten eines bestimmten Typs.
Die Art jedes Knotens kann mit der NodeType Eigentum. Diese Eigenschaft gibt eine NodeType Aufzählungswert. Ein beispielsweise durch die Paragraph Klassenrückgänge NodeType.Paragraph, und einem durch die Table Klassenrückgänge NodeType.Table.
Das folgende Beispiel zeigt, wie man einen Knotentyp mit dem NodeType Aufzählung:
Dokument Baum Navigation
Aspose.Words stellt ein Dokument als Knotenbaum dar, mit dem Sie zwischen Knoten navigieren können. In diesem Abschnitt wird beschrieben, wie der Dokumentbaum in Aspose.Words.
Wenn Sie das früher vorgestellte Musterdokument im Document Explorer öffnen, erscheint der Knotenbaum genau so, wie er in Aspose.Words.
Dokumente Node Relationships
Die Knoten im Baum haben Beziehungen zwischen ihnen:
- Ein Knoten mit einem anderen Knoten ist ein parent.
- Ja. Der im Stammknoten enthaltene Knoten ist ein child. Kinderknoten desselben Elternteils sind sibling Knoten.
- Die root Der Knoten ist immer Document Knoten.
Die Knoten, die andere Knoten enthalten können, stammen aus dem CompositeNode Klasse, und alle Knoten letztlich von der Node Klasse. Diese beiden Basisklassen bieten gemeinsame Methoden und Eigenschaften für die Baumstrukturnavigation und Modifikation.
Das folgende UML-Objektdiagramm zeigt mehrere Knoten des Musterdokuments und deren Beziehungen zueinander über die Eltern-, Kind- und Geschwistereigenschaften:
Dokument ist Node Owner
Ein Knoten gehört immer zu einem bestimmten Dokument, auch wenn er gerade erstellt oder aus dem Baum entfernt wurde, weil in den Document Knoten. Beispielsweise ist es nicht möglich, eine Paragraph ohne Document weil jeder Absatz einen zugewiesenen Stil hat, der global für das Dokument definiert ist. Diese Regel wird verwendet, wenn Sie neue Knoten erstellen. Ein neues hinzufügen Paragraph direkt zum DOM erfordert ein an den Konstrukteur übergebenes Dokumentobjekt.
Bei der Erstellung eines neuen Absatzes DocumentBuilder, der Bauer hat immer Document Klasse, die durch die DocumentBuilder.Document Eigentum.
Das folgende Codebeispiel zeigt, dass beim Erstellen eines beliebigen Knotens immer ein Dokument definiert wird, das den Knoten besitzt:
Parent Node
Jeder Knoten hat einen von der ParentNode Eigentum. Ein Knoten hat keinen Elternknoten, das heißt, ParentNode ist in folgenden Fällen null:
- Ja. Der Knoten wurde gerade erstellt und noch nicht dem Baum hinzugefügt.
- Ja. Der Knoten wurde vom Baum entfernt.
- Ja. Das ist die Wurzel Document Knoten, der immer einen Null-Mutterknoten aufweist.
Sie können einen Knoten aus seinem Elternteil entfernen, indem Sie die Remove Methode. Das folgende Codebeispiel zeigt, wie man auf den Stammknoten zugreift:
Kinder Nodes
Der effizienteste Weg, um Kinderknoten eines CompositeNode über die FirstChild und LastChild Eigenschaften, die die ersten bzw. letzten Kinderknoten zurückgeben. Wenn es keine Kinderknoten gibt, kehren diese Eigenschaften zurück null.
CompositeNode stellt auch die ChildNodes Erfassung, die den Zugriff auf die Kinderknoten ermöglicht. Die ChildNodes Eigenschaft ist eine Live-Kollektion von Knoten, was bedeutet, dass, wenn das Dokument geändert wird, wie wenn Knoten entfernt oder hinzugefügt werden, die ChildNodes Die Sammlung wird automatisch aktualisiert.
Wenn ein Knoten kein Kind hat, dann ChildNodes Eigentum gibt eine leere Sammlung zurück. Sie können überprüfen, ob CompositeNode enthält alle Kinderknoten mit der HasChildNodes Eigentum.
Das folgende Codebeispiel zeigt, wie sofortige Kinderknoten einer CompositeNode
Verwendung des von der ChildNodes
Sammlung:
Das folgende Codebeispiel zeigt, wie sofortige Kinderknoten einer CompositeNode
mit indiziertem Zugriff:
Geschwister Nodes
Sie können den Knoten erhalten, der einem bestimmten Knoten unmittelbar vorangeht oder folgt, indem PreviousSibling und NextSibling Eigenschaften. Wenn ein Knoten das letzte Kind seines Elternteils ist, dann NextSibling Eigentum ist null. Umgekehrt, wenn der Knoten das erste Kind seines Elternteils ist, die PreviousSibling Eigentum ist null.
Das folgende Codebeispiel zeigt, wie man alle direkten und indirekten Kinderknoten eines Kompositknotens effizient besucht:
Typischer Zugang zu Kinder- und Elternknoten
Bisher haben wir die Eigenschaften diskutiert, die einen der Basistypen zurückgeben – Node oder CompositeNode. Aber manchmal gibt es Situationen, in denen Sie Werte auf eine bestimmte Knotenklasse werfen müssen, wie zum Beispiel Run oder Paragraph. Das heißt, man kann beim Arbeiten mit dem Casting nicht völlig vom Casting wegkommen Aspose.Words DOM, die zusammengesetzt ist.
Um die Notwendigkeit des Gießens zu reduzieren, die meisten Aspose.Words Klassen bieten Eigenschaften und Sammlungen, die einen starken Zugriff bieten. Es gibt drei Grundmuster des Typzugriffs:
- Ein Elternknoten entlarvt FirstXXX und LastXXX Eigenschaften. Zum Beispiel die Document hat FirstSection und LastSection Eigenschaften. Ebenso wie Table Eigenschaften wie FirstRow, LastRow, und andere.
- Ein Elternknoten enthüllt eine typisierte Sammlung von Kinderknoten, wie Document.Sections, Body.Paragraphs, und andere.
- Ein Kinderknoten bietet einen eingegebenen Zugriff auf seine Eltern, wie Run.ParentParagraph, Paragraph.ParentSection, und andere.
Typierte Eigenschaften sind nur nützliche Verknüpfungen, die manchmal einen leichteren Zugriff bieten als generische Eigenschaften, die von Node.ParentNode und CompositeNode.FirstChild.
Das folgende Codebeispiel zeigt, wie man eingegebene Eigenschaften für Zugriffsknoten des Dokumentbaums verwendet: