Lesen von Element- und Attributinhalten

Damit Inhalte von Elementen und Attributen in einem Aufruf gelesen werden können, stellt der XmlReader die ReadInnerXml- und die ReadOuterXml-Methode bereit. Ist der Reader in einem Knoten platziert, liest die ReadInnerXml-Eigenschaft durch einen Pull den gesamten Inhalt des Knotens ein, einschließlich Markup, und zwar vom Start-Elementtag bis zum End-Elementtag. Nach dem ReadInnerXml-Aufruf wird der XmlReader hinter dem End-Elementtag positioniert. Betrachten Sie die folgende XML-Eingabe:

Eingabe

<Book>
 <Price Retail="29.95" />
 <Title BookTitle="My First Book" author="me" />
</Book>

Die folgende Ausgabe wird durch den Aufruf von ReadInnerXml zurückgegeben, wenn der Reader im Book-Element platziert wird:

 <Price Retail="29.95" />
 <Title BookTitle="My First Book" author="me" />

ReadInnerXml positioniert den Reader hinter dem Endtag des gelesenen Elements. Bei einer Eingabe wie der oben stehenden ist der aktuelle Knoten also der Knoten hinter dem </Book>-Endelement, sofern vorhanden. Mit der Read-Methode würde der Reader um ein weiteres Element nach vorne verschoben. Im folgenden Codebeispiel wird nach dem Aufruf von ReadInnerXml der aktuelle Knoten im Stream angezeigt sowie Read ausgeführt, nachdem ReadInnerXml den Reader um einen weiteren Knoten nach vorne verschoben hat.

public static void Main() 
{
    string text = @"<book><one><title>ABC</title></one><two><price>24.95</price></two></book>";
    XmlTextReader reader = new XmlTextReader(new StringReader(text));
    reader.WhitespaceHandling = WhitespaceHandling.None;

    // Moves the reader to the 'book' node.
    reader.MoveToContent(); 

    // Moves the reader to the 'one' node.
    reader.Read(); 
    reader.MoveToContent();

    // Reads the inner XML of the 'one' node, which is the entire 'title'
    // node, and outputs <title>ABC</title>. 
    Console.WriteLine(reader.ReadInnerXml()); 

    // The reader is now positioned on the 'two' node.
    Console.WriteLine(reader.Name);

    // Calling Read will advance the reader beyond the 'two' node to 
    // the 'price' node.
    reader.Read();
    // Outputs the node of 'price'.
    Console.WriteLine(reader.Name);
}

Der Code gibt Folgendes aus:

<title>ABC</title>

two

price

Die ReadInnerXml-Methode analysiert XML und gibt den Inhalt zurück, je nach dem XmlNodeType. Die folgende Tabelle zeigt Beispielinhalte für ein Element und ein Attribut, die Werte, die von einem Aufruf an ReadInnerXml zurückgegeben werden, sowie die Position des Readers nach dem Aufruf.

Knotentyp Inhalt des untergeordneten Elements Rückgabewert Position
Element <myelem> text </myelem> text Auf dem Knoten nach dem Endelement </myelem>
Attribut <myelem attr1="val1" attr2="val2"> text </myelem> val1 Bleibt auf dem Attributknoten "attr1".

Alle anderen XmlNodeTypes geben string.Empty zurück.

Die ReadOuterXml-Methode verhält sich ähnlich wie die ReadInnerXml-Methode, mit dem Unterschied, dass ihr Rückgabewert das Start- und das Endtag beinhaltet. Bei Positionierung auf einem Endknoten ist diese Methode gleichbedeutend mit dem Ausführen einer Read-Operation.

Die ReadOuterXml-Methode analysiert XML und gibt die Inhalte verschiedener untergeordneter Elemente zurück, je nach dem aktuellen XmlNodeType. Die folgende Tabelle zeigt Beispielinhalte für ein Element und ein Attribut, die Werte, die von einem Aufruf an ReadOuterXml zurückgegeben werden, sowie die Position des Readers nach dem Aufruf.

Knotentyp Inhalt des untergeordneten Elements Rückgabewert Position
Element <elem1> text </elem1> <elem1> text </elem1> Nach dem </elem1>-Tag.
Attribut <elem1 attr1="attrValue1" attr2="attrValue2" > text </elem1> attr1="attrValue1" Auf dem Attributknoten "attr1".

Alle anderen Knotentypen geben string.Empty an die ReadOuterXml-Methode zurück.

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" | Überspringen von Inhalten mit "XmlReader" | 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