Partager via


Contenu ignoré avec XmlReader

Le contenu est ignoré de deux manières. La première manière consiste à appeler une méthode qui se déplace directement vers le contenu à l'aide de la méthode MoveToContent. La seconde manière consiste à appeler directement la méthode Skip qui ignore les nœuds enfants du nœud actuel.

Déplacement direct vers le contenu

Pour vous déplacer vers un contenu, utilisez la méthode MoveToContent. Cette méthode vérifie le nœud actuel pour voir s'il s'agit d'un nœud de contenu. Un nœud de contenu est défini comme étant un nœud Text, CDATA, Element, EndElement, EntityReference ou EndEntity. S'il ne s'agit pas de l'un des types de nœud précédents, la méthode ignore ce nœud et passe au nœud suivant ou à la fin du fichier. Elle continue d'ignorer les nœuds jusqu'à ce qu'elle trouve un nœud de ce type ou qu'elle atteigne la fin du fichier, puis s'arrête. Autrement dit, la méthode ignore les types de nœud suivants :

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

Si l'application ne veut que du contenu, l'utilisation de ce type de navigation de contenu est plus efficace que d'appeler Read, qui déplace le lecteur jusqu'au nœud suivant, et de forcer l'application à vérifier le type de nœud, à déterminer s'il existe un contenu à lire et à le lire le cas échéant.

Si l'application est positionnée sur un nœud d'attribut, l'appel à MoveToContent déplace la position du nœud actuel vers l'élément propriétaire de cet attribut. Si l'application est déjà positionnée sur un nœud de contenu, l'appel à MoveToContent retourne la valeur de la propriété NodeType à l'application. Ces comportements permettent à l'application d'ignorer le balisage XML aléatoire. Examinons par exemple l'entrée XML suivante :

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

Le code suivant recherche l'élément price « 123.4 » et convertit le contenu de son texte en 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());
}

Pour donner un autre exemple, la méthode MoveToContent est souvent utilisée pour rechercher le nœud DocumentElement dans un fichier XML. Supposons le fichier d'entrée XML suivant nommé 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>

Le code suivant positionne le lecteur sur le nœud DocumentElement <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();

Données ignorées à l'aide de la méthode Skip

La méthode Skip ignore l'élément en cours. Si le type de nœud est XmlNodeType.Element, l'appel à Skip ignore tout le contenu de l'élément, ainsi que sa balise de fin.

Par exemple, si vous avez le code XML suivant :

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

et que vous êtes positionné sur le nœud <a> ou l'un de ses attributs, l'appel à Skip vous positionne sur le nœud <b>. Si vous êtes positionné sur un nœud sans descendant, tel que x, ou sur le nœud de texte abc, alors la méthode Skip passe au nœud suivant, ce qui signifie qu'elle se comporte en fait comme Read.

Skip applique au contenu les règles de construction correcte.

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 | Lecture du contenu d'éléments et d'attributs | 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