Freigeben über


Überspringen von Inhalten mit dem "XmlReader"

Es gibt zwei Möglichkeiten, Inhalte zu überspringen. Eine besteht darin, mit Hilfe der MoveToContent-Methode direkt zu dem gewünschten Inhalt zu wechseln. Die andere Möglichkeit besteht darin, die Skip-Methode direkt aufzurufen. Mit dieser Methode werden untergeordnete Knoten vom aktuellen Knoten aus übersprungen.

Direktes Wechseln zu Inhalten

Verwenden Sie die MoveToContent-Methode, um direkt zu einem bestimmten Inhalt zu wechseln. Die Methode überprüft den aktuellen Knoten, um festzustellen, ob dieser ein Inhaltsknoten ist. Ein Inhaltsknoten ist per definitionem ein beliebiger Text-, CDATA-, Element-, EndElement-, EntityReference- oder EndEntity-Knoten. Handelt es sich nicht um einen der oben genannten Knotentypen, wird dieser Knoten übersprungen und zum nächsten Knoten oder zum Dateiende gewechselt. Die Methode überspringt Knoten so lange, bis ein Knoten des entsprechenden Typs gefunden wird oder das Dateiende erreicht ist, und hält dann an. Die folgenden Knotentypen werden also übersprungen:

  • XmlDeclaration
  • ProcessingInstruction
  • DocumentType
  • Comment
  • Attribute
  • Whitespace
  • SignificantWhitespace

Diese Art der Navigation in Inhalten ist, wenn die Anwendung nur Inhalte benötigt, effizienter, als das Aufrufen der Read-Methode. Bei letzterer geschieht Folgendes: Der Reader wird zum nächsten Knoten verschoben, die Anwendung wird gezwungen, den Knotentyp zu testen und zu ermitteln, ob zu lesender Inhalt vorhanden ist, und wenn dies der Fall ist, wird der Inhalt gelesen.

Wenn die Anwendung in einem Attributknoten positioniert ist, wird durch Aufrufen von MoveToContent die aktuelle Knotenposition auf das Element verschoben, das der Eigentümer dieses Attributs ist. Befindet sich die Anwendung bereits in einem Inhaltsknoten, gibt der Aufruf von MoveToContent den Wert der NodeType-Eigenschaft an die Anwendung zurück. Durch diese Verhaltensweisen kann die Anwendung zufälliges XML-Markup überspringen. Betrachten Sie beispielsweise die folgende XML-Eingabe:

<?xml version="1.0">
<!DOCTYPE price SYSTEM "abc">
<!––the price of the book –->
<price>123.4</price>

Der folgende Code findet das price-Element von "123.4" und konvertiert seinen Textinhalt in einen Wert vom Typ double:

If readr.MoveToContent() = XmlNodeType.Element And readr.Name = "price" Then
   _price = XmlConvert.ToDouble(readr.ReadString())
End If
[C#]
if (readr.MoveToContent() == XmlNodeType.Element && readr.Name =="price")
{
    _price = XmlConvert.ToDouble(readr.ReadString());
}

Ein weiteres Beispiel veranschaulicht, wie MoveToContent zum Auffinden des DocumentElement-Knotens in einer XML-Datei verwendet wird. Ausgehend von der XML-Eingabedatei File.xml:

<?xml encoding="utf-8"?>
<!-- Can have comment and DOCTYPE nodes here to skip past here -->
<phone a="2" b="N">
<data>
   <d1>Data</d1>
   <d2>More Data</d2>
   <d3>Some More Data</d3>
</data>
</phone>

positioniert der folgende Code den Reader auf dem DocumentElement-Knoten <phone>:

Dim doc as XmlDocument = New XmlDocument()
Dim treader as New XmlTextReader("file.xml")
treader.MoveToContent()        
[C#]
XmlDocument doc = new XmlDocument();
XmlTextReader treader = new XmlTextReader("file.xml");
treader.MoveToContent();

Überspringen von Daten mit der Skip-Methode

Mit der Skip-Methode wird das aktuelle Element übersprungen. Wenn der Knotentyp XmlNodeType.Element ist, wird durch Aufrufen von Skip der gesamte Inhalt des Elements und des Element-Endtags übersprungen.

Angenommen, folgender XML-Code liegt vor:

<a name="facts" location="123">
<x/> 
abc 
<y/>
</a>
<b>
...
</b>

und Sie befinden sich auf dem <a>-Knoten oder einem seiner Attribute. Dann wird die Position durch Aufrufen von Skip auf den <b>-Knoten verschoben. Wenn Sie sich auf einem Endknoten befinden, z. B. x, oder auf dem Textknoten abc, springen Sie mit Skip zum nächsten Knoten. Dieses Verhalten entspricht dem Aufrufen von Read.

Die Skip-Methode wendet die Regeln für wohlgeformten Code auf den Inhalt an.

Siehe auch

Lesen von XML mit dem "XmlReader" | Aktuelle Knotenposition in "XmlReader" | Eigenschafteneinstellungen für "XmlReader" | Objektvergleich mit "XmlNameTable" in "XmlReader" | Lesen von Attributen mit "XmlReader" | Lesen von Element- und Attributinhalten | Lesen und Erweitern von "EntityReference" | Vergleichen von "XmlReader" und SAX-Reader | Lesen von XML-Daten mit "XmlTextReader" | Lesen von Strukturknoten mit dem "XmlNodeReader" | Überprüfen von XML mit "XmlValidatingReader" | Erstellen eines benutzerdefinierten XML-Readers | XmlReader-Klasse | XmlReader-Member | XmlNodeReader-Klasse | XmlNodeReader-Member | XmlTextReader-Klasse | XmlTextReader-Member | XmlValidatingReader-Klasse | XmlValidatingReader