Partager via


Lecture du contenu d'éléments et d'attributs

XmlReader fournit les méthodes ReadInnerXml et ReadOuterXml pour lire le contenu d'éléments et d'attributs dans un appel. Lorsque vous êtes positionné sur un nœud, la propriété ReadInnerXml extrait tout le contenu du nœud, y compris le balisage, en commençant après la balise de l'élément et en allant jusqu'à sa balise de fin. Après l'appel à ReadInnerXml, XmlReader est positionné après la balise de fin de l'élément. Supposons l'entrée XML suivante :

Entrée

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

Voici la sortie qui est retournée comme résultat de l'appel à ReadInnerXml lorsque le lecteur est positionné sur l'élément Book :

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

ReadInnerXml positionne le lecteur après la balise de fin de l'élément qui est lu. Cela signifie que pour l'entrée ci-dessus, le nœud actuel est le nœud après l'élément de fin </Book> à condition qu'il en existe un. Effectuer une méthode Read permettrait ensuite de l'avancer d'un élément supplémentaire. L'exemple de code suivant montre le nœud actuel dans le flux après l'appel de ReadInnerXml, et comment le fait d'exécuter un Read après ReadInnerXml avance de nouveau le lecteur d'un nœud supplémentaire.

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);
}

La sortie générée par ce code est la suivante :

<title>ABC</title>

two

price

ReadInnerXml analyse le code XML et retourne le contenu, en fonction du type XmlNodeType. Le tableau suivant montre des exemples de contenu pour un élément et un attribut, les valeurs retournées suite à un appel à ReadInnerXml et la position du lecteur après l'appel.

Type de nœud Contenu enfant Valeur de retour Position
Élément <myelem> text </myelem> text Sur le nœud après l'élément de fin </myelem>
Attribut <myelem attr1="val1" attr2="val2"> text </myelem> val1 Reste sur le nœud d'attribut « attr1 ».

Tous les autres types XmlNodeType retournent string.Empty.

Le comportement de la méthode ReadOuterXml est similaire à celui de la méthode ReadInnerXml, si ce n'est que sa valeur de retour comprend les balises de début et de fin. Lorsque vous êtes positionné sur un nœud sans descendant, cette méthode équivaut à exécuter une opération Read.

ReadOuterXml analyse le code XML et retourne divers contenus enfants, en fonction du type XmlNodeType en cours. Le tableau suivant montre des exemples de contenu pour un élément et un attribut, les valeurs retournées suite à un appel à ReadOuterXml et la position du lecteur après l'appel.

Type de nœud Contenu enfant Valeur de retour Position
Élément <elem1> text </elem1> <elem1> text </elem1> Positionné après la balise </elem1>.
Attribut <elem1 attr1="attrValue1" attr2="attrValue2" > text </elem1> attr1="attrValue1" Positionné sur le nœud d'attribut « attr1 ».

Tous les autres types de nœud retournent string.Empty à ReadOuterXml.

Voir aussi

Lecture de XML avec XmlReader | Position du nœud actuel dans XmlReader | Paramètres des propriétés sur XmlReader | Comparaison d'objets à l'aide de XmlNameTable avec XmlReader | Lecture d'attributs avec XmlReader | Contenu ignoré avec XmlReader | Lecture et expansion de références d'entité | Comparaison entre XmlReader et le lecteur SAX | Lecture de données XML avec XmlTextReader | Lecture d'arborescences de nœuds avec XmlNodeReader | Validation de code XML avec XmlValidatingReader | Création de lecteur XML personnalisé | XmlReader, classe | XmlReader, membres | XmlNodeReader, classe | XmlNodeReader, membres | XmlTextReader, classe | XmlTextReader, membres | XmlValidatingReader, classe | XmlValidatingReader