Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
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.