XML-Dokumentobjektmodell (DOM)

Die DOM (Dokumentobjektmodell)-Klasse ist eine speicherinterne Darstellung eines XML-Dokuments. Mit dem DOM können XML-Dokumente programmgesteuert gelesen, verwaltet und geändert werden. Die XmlReader-Klasse liest außerdem XML, bietet hierbei jedoch nur nicht zwischengespeicherten, schreibgeschützten Vorwärtszugriff. Das bedeutet, dass es nicht möglich ist, die Werte eines Attributs oder den Inhalt eines Elements zu bearbeiten oder Knoten mit dem XmlReader einzufügen und zu entfernen. Das Bearbeiten ist die wichtigste Funktion des Dokumentobjektmodells. XML-Daten werden auf die übliche und strukturierte Weise im Speicher dargestellt, während die tatsächlichen XML-Daten in einer Datei oder bei der Übergabe aus einem anderen Objekt in linearer Form gespeichert werden. Die folgenden Daten sind XML-Daten.

Eingabe

<?xml version="1.0"?>
  <books>
    <book>
        <author>Carson</author>
        <price format="dollar">31.95</price>
        <pubdate>05/01/2001</pubdate>
    </book>
    <pubinfo>
        <publisher>MSPress</publisher>
        <state>WA</state>
    </pubinfo>
  </books> 

Die folgende Abbildung zeigt, wie der Speicher strukturiert ist, wenn diese XML-Daten in die DOM-Struktur eingelesen werden.

XML-Dokumentstruktur

Innerhalb der XML-Dokumentstruktur stellt jeder Kreis in dieser Abbildung einen Knoten dar. Dieser wird als XmlNode-Objekt bezeichnet. Das XmlNode-Objekt ist das grundlegende Objekt in der DOM-Struktur. Die XmlDocument-Klasse, die XmlNode erweitert, unterstützt Methoden für die Durchführung von Operationen für das Dokument als Ganzes, z. B. Laden in den Speicher oder Speichern in eine Datei. Darüber ermöglicht XmlDocument das Anzeigen und Bearbeiten der Knoten im gesamten XML-Dokument. Sowohl XmlNode als auch XmlDocument sind in puncto Leistung und einfache Verwendbarkeit verbessert worden. Sie bieten Methoden und Eigenschaften für folgende Zwecke:

  • Zugreifen auf DOM-spezifische Knoten, z. B. Attributknoten, Elementknoten und Entitätsverweisknoten, sowie Bearbeiten dieser Knoten.

  • Abrufen ganzer Knoten zusätzlich zu den Informationen, die in dem Knoten enthalten sind, z. B. dem Text in einem Elementknoten.

    Hinweis   Wenn eine Anwendung die vom DOM bereitgestellte Struktur oder Bearbeitungsmöglichkeiten nicht erfordert, bieten die XmlReader-Klasse und die XmlWriter-Klasse nicht zwischengespeicherten Vorwärtsstreamzugriff auf XML. Weitere Informationen hierzu finden Sie unter Lesen von XML mit dem "XmlReader" und Schreiben von XML mit dem "XmlWriter".

Node-Objekte weisen einen Satz Methoden und Eigenschaften auf sowie grundlegende und stringente Charakteristika. Zu diesen Charakteristika zählt z. B. Folgendes:

  • Knoten haben einen einzigen übergeordneten Knoten, also einen Knoten, der sich direkt über ihnen befindet. Der einzige Knoten, der keinen übergeordneten Knoten besitzt, ist der Dokumentstamm, da dieser der Knoten auf der obersten Ebene ist und das Dokument selbst sowie Dokumentfragmente enthält.

  • Die meisten Knoten haben mehrere untergeordnete Knoten, also Knoten, die sich direkt unter ihnen befinden. Im Folgenden eine Liste der Knotentypen, die untergeordnete Knoten aufweisen können.

    • Document
    • DocumentFragment
    • EntityReference
    • Element
    • Attribute

    Die Knotentypen XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction und DocumentType haben keine untergeordneten Knoten.

  • Knoten, die sich auf der gleichen Ebene befinden (im Diagramm durch den book- und den pubinfo-Knoten dargestellt), sind gleichgeordnete Knoten.

Eine der speziellen Eigenschaften des DOMs besteht darin, wie es Attribute behandelt. Attribute sind keine Knoten, die Bestandteil der Beziehungen zwischen übergeordneten, untergeordneten und gleichgeordneten Knoten wären. Attribute gelten als eine Eigenschaft des Elementknotens und setzen sich aus einem Namen und einem Wertepaar zusammen. Angenommen, dem Element price sind die XML-Daten format="dollar" zugeordnet. In diesem Fall ist das Wort format der Name des Attributs, und der Wert des format-Attributs ist dollar. Um das format="dollar"-Attribut des price-Knotens abzurufen, rufen Sie die GetAttribute-Methode auf, wenn sich der Cursor beim Elementknoten price ** befindet. Weitere Informationen finden Sie unter Zugreifen auf Attribute im Dokumentobjektmodell.

Beim Einlesen von XML in den Speicher werden Knoten erstellt. Nicht alle Knoten sind jedoch vom gleichen Typ. In XML gelten für ein Element andere Regeln und Syntax als für eine Verarbeitungsanweisung. Beim Einlesen der unterschiedlichen Daten wird also jedem Knoten ein Knotentyp zugewiesen. Dieser Knotentyp bestimmt die Merkmale und Funktionen des Knotens.

Weitere Informationen zu den im Speicher generierten Knotentypen finden Sie unter XML-Knotentypen. Weitere Informationen zu den in der Knotenstruktur erstellten Objekten finden Sie unter Zuordnen der Objekthierarchie zu XML-Daten.

Microsoft hat die APIs, die in Level 1 und Level 2 des Dokumentobjektmodells des World Wide Web Consortium (W3C) verfügbar sind, erweitert, um die Arbeit mit XML-Dokumenten zu vereinfachen. Diese zusätzlichen Klassen, Methoden und Eigenschaften unterstützen nicht nur die W3C-Standards voll, sondern erweitern die Funktionen über das hinaus, was mit dem XML-DOM des W3C erreicht werden kann. Mit den neuen Klassen können Sie auf relationale Daten zugreifen und somit Methoden für die Synchronisierung mit ADO.NET-Daten nutzen, wobei Daten simultan als XML offen gelegt werden. Weitere Informationen hierzu finden Sie unter Synchronisieren eines DataSets mit einem XmlDataDocument.

Das DOM ist besonders nützlich zum Einlesen von XML-Daten in den Speicher, um deren Struktur zu ändern, Knoten hinzuzufügen oder zu entfernen oder die in einem Knoten gespeicherten Daten zu bearbeiten, z. B. den Text in einem Element. Allerdings stehen auch andere Klassen zur Verfügung, die in anderen Situationen schneller als das DOM sind. Für den schnellen, nicht zwischengespeicherten Vorwärtsstreamzugriff auf XML verwenden Sie den XmlReader und den XmlWriter. Wenn Sie wahlfreien Zugriff mit einem Cursormodell und XPath benötigen, verwenden Sie die XPathNavigator-Klasse.

Siehe auch

XML-Knotentypen | Zuordnen der Objekthierarchie zu XML-Daten