Freigeben über


Zuordnung der Objekthierarchie zu XML-Daten

Wenn sich ein XML-Dokument im Arbeitsspeicher befindet, ist die konzeptionelle Darstellung ein Baum. Für die Programmierung verfügen Sie über eine Objekthierarchie, um auf die Knoten der Struktur zuzugreifen. Das folgende Beispiel zeigt, wie der XML-Inhalt zu Knoten wird.

Da der XML-Code in das XML-Dokumentobjektmodell (DOCUMENT Object Model, DOM) gelesen wird, werden die Teile in Knoten übersetzt, und diese Knoten behalten zusätzliche Metadaten zu sich selbst, z. B. den Knotentyp und die Werte. Der Knotentyp ist sein Objekt und bestimmt, welche Aktionen ausgeführt werden können und welche Eigenschaften festgelegt oder abgerufen werden können.

Wenn Sie über die folgende einfache XML-Datei verfügen:

Eingabe

<book>  
    <title>The Handmaid's Tale</title>  
</book>  

Die Eingabe wird im Arbeitsspeicher als folgende Knotenstruktur mit der zugewiesenen Knotentypeigenschaft dargestellt:

Beispielknotenstruktur
Darstellung von "book" und "title" in der Knotenstruktur

Das book Element wird zu einem XmlElement-Objekt , dem nächsten Element, titleauch zu einem XmlElement, während der Elementinhalt zu einem XmlText-Objekt wird. Bei der Betrachtung der XmlElement-Methoden und -Eigenschaften unterscheiden sich die Methoden und Eigenschaften von den Methoden und Eigenschaften, die für ein XmlText-Objekt verfügbar sind. Daher ist es wichtig, zu wissen, welcher Knotentyp das XML-Markup erhält, da der Knotentyp die Aktionen bestimmt, die ausgeführt werden können.

Das folgende Beispiel liest in XML-Daten und schreibt je nach Knotentyp unterschiedliche Texte aus. Verwenden der folgenden XML-Datendatei als Eingabe ,items.xml:

Eingabe

<?xml version="1.0"?>  
<!-- This is a sample XML document -->  
<!DOCTYPE Items [<!ENTITY number "123">]>  
<Items>  
  <Item>Test with an entity: &number;</Item>  
  <Item>test with a child element <more/> stuff</Item>  
  <Item>test with a CDATA section <![CDATA[<456>]]> def</Item>  
  <Item>Test with a char entity: A</Item>  
  <!-- Fourteen chars in this element.-->  
  <Item>1234567890ABCD</Item>  
</Items>  

Im folgenden Codebeispiel wird die items.xml-Datei gelesen und Informationen für jeden Knotentyp angezeigt.

Imports System  
Imports System.IO  
Imports System.Xml  
  
Public Class Sample  
    Private Const filename As String = "items.xml"  
  
    Public Shared Sub Main()  
  
        Dim reader As XmlTextReader = Nothing  
  
        Try  
            ' Load the reader with the data file and
            'ignore all white space nodes.
            reader = New XmlTextReader(filename)  
            reader.WhitespaceHandling = WhitespaceHandling.None  
  
            ' Parse the file and display each of the nodes.  
            While reader.Read()  
                Select Case reader.NodeType  
                    Case XmlNodeType.Element  
                        Console.Write("<{0}>", reader.Name)  
                    Case XmlNodeType.Text  
                        Console.Write(reader.Value)  
                    Case XmlNodeType.CDATA  
                        Console.Write("<![CDATA[{0}]]>", reader.Value)  
                    Case XmlNodeType.ProcessingInstruction  
                        Console.Write("<?{0} {1}?>", reader.Name, reader.Value)  
                    Case XmlNodeType.Comment  
                        Console.Write("<!--{0}-->", reader.Value)  
                    Case XmlNodeType.XmlDeclaration  
                        Console.Write("<?xml version='1.0'?>")  
                    Case XmlNodeType.Document  
                    Case XmlNodeType.DocumentType  
                        Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value)  
                    Case XmlNodeType.EntityReference  
                        Console.Write(reader.Name)  
                    Case XmlNodeType.EndElement  
                        Console.Write("</{0}>", reader.Name)  
                End Select  
            End While  
  
        Finally  
            If Not (reader Is Nothing) Then  
                reader.Close()  
            End If  
        End Try  
    End Sub 'Main ' End class  
End Class 'Sample  
using System;  
using System.IO;  
using System.Xml;  
  
public class Sample  
{  
    private const String filename = "items.xml";  
  
    public static void Main()  
    {  
        XmlTextReader reader = null;  
  
        try  
        {  
            // Load the reader with the data file and ignore
            // all white space nodes.  
            reader = new XmlTextReader(filename);  
            reader.WhitespaceHandling = WhitespaceHandling.None;  
  
            // Parse the file and display each of the nodes.  
            while (reader.Read())  
            {  
                switch (reader.NodeType)  
                {  
                    case XmlNodeType.Element:  
                        Console.Write("<{0}>", reader.Name);  
                        break;  
                    case XmlNodeType.Text:  
                        Console.Write(reader.Value);  
                        break;  
                    case XmlNodeType.CDATA:  
                        Console.Write("<![CDATA[{0}]]>", reader.Value);  
                        break;  
                    case XmlNodeType.ProcessingInstruction:  
                        Console.Write("<?{0} {1}?>", reader.Name, reader.Value);  
                        break;  
                    case XmlNodeType.Comment:  
                        Console.Write("<!--{0}-->", reader.Value);  
                        break;  
                    case XmlNodeType.XmlDeclaration:  
                        Console.Write("<?xml version='1.0'?>");  
                        break;  
                    case XmlNodeType.Document:  
                        break;  
                    case XmlNodeType.DocumentType:  
                        Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);  
                        break;  
                    case XmlNodeType.EntityReference:  
                        Console.Write(reader.Name);  
                        break;  
                    case XmlNodeType.EndElement:  
                        Console.Write("</{0}>", reader.Name);  
                        break;  
                }  
            }  
        }  
  
        finally  
        {  
            if (reader != null)  
                reader.Close();  
        }  
    }  
} // End class  

Die Ausgabe aus dem Beispiel zeigt die Zuordnung der Daten zu den Knotentypen an.

Ausgabe

<?xml version='1.0'?><!--This is a sample XML document --><!DOCTYPE Items [<!ENTITY number "123">]<Items><Item>Test with an entity: 123</Item><Item>test with a child element <more> stuff</Item><Item>test with a CDATA section <![CDATA[<456>]]> def</Item><Item>Test with a char entity: A</Item><--Fourteen chars in this element.--><Item>1234567890ABCD</Item></Items>

Wenn Sie die Eingabe und die daraus generierte Ausgabe Zeile für Zeile betrachten, können Sie anhand der folgenden Tabelle untersuchen, welcher Knotentest welche Ausgabezeilen generiert hat. Dadurch lässt sich feststellen, welche XML-Daten in welchen Knotentyp umgesetzt wurden.

Eingabe Ausgabe Knotentyptest
<?xml version="1.0"?> <?xml version='1.0'?> XmlNodeType.XmlDeclaration
<-- Dies ist ein XML-Beispieldokument -> <--Dies ist ein XML-Beispieldokument -> XmlNodeType.Comment
<! DOCTYPE Items [<! ENTITY-Nummer "123">]> <! DOCTYPE Items [<! ENTITY-Nummer "123">] XmlNodeType.DocumentType
<Elemente> <Elemente> XmlNodeType.Element
<Element> <Element> XmlNodeType.Element
Test mit einer Entität: &Nummer; Testen mit einer Entität: 123 XmlNodeType.Text
</Artikel> </Artikel> XmlNodeType.EndElement
<Element> <Element> XmNodeType.Element
Test mit einem untergeordneten Element Test mit einem untergeordneten Element XmlNodeType.Text
<mehr> <mehr> XmlNodeType.Element
stopfen stopfen XmlNodeType.Text
</Artikel> </Artikel> XmlNodeType.EndElement
<Element> <Element> XmlNodeType.Element
Testen mit einem CDATA-Abschnitt Testen mit einem CDATA-Abschnitt XmlTest.Text
<! [CDATA[<456>]]> <! [CDATA[<456>]]> XmlTest.CDATA
Def Def XmlNodeType.Text
</Artikel> </Artikel> XmlNodeType.EndElement
<Element> <Element> XmlNodeType.Element
Test mit einer char-Entität: A Test mit einer char-Entität: A XmlNodeType.Text
</Artikel> </Artikel> XmlNodeType.EndElement
<-- Vierzehn Zeichen in diesem Element.--> <--Vierzehn Zeichen in diesem Element.--> XmlNodeType.Comment
<Element> <Element> XmlNodeType.Element
1234567890ABCD 1234567890ABCD XmlNodeType.Text
</Artikel> </Artikel> XmlNodeType.EndElement
</Artikel> </Artikel> XmlNodeType.EndElement

Sie müssen wissen, welcher Knotentyp zugewiesen ist, da der Knotentyp steuert, welche Arten von Aktionen gültig sind und welche Art von Eigenschaften Sie festlegen und abrufen können.

Die Knotenerstellung für Leerraum wird gesteuert, wenn die Daten durch das PreserveWhitespace-Flag in das DOM geladen werden. Weitere Informationen finden Sie unter Leerzeichen und signifikante Leerzeichenbehandlung beim Laden des DOM.

Informationen zum Hinzufügen neuer Knoten zum DOM finden Sie unter Einfügen von Knoten in ein XML-Dokument. Informationen zum Entfernen von Knoten aus dem DOM finden Sie unter Entfernen von Knoten, Inhalt und Werten aus einem XML-Dokument. Informationen zum Ändern des Inhalts von Knoten im DOM finden Sie unter Ändern von Knoten, Inhalt und Werten in einem XML-Dokument.

Siehe auch