Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

XmlReader classe

 

Date de publication : novembre 2016

Représente un lecteur fournissant un accès rapide, non mis en cache et en avant uniquement vers les données XML.

Pour parcourir le code source .NET Framework pour ce type, consultez la Reference Source.

Espace de noms:   System.Xml
Assembly:  System.Xml (dans System.Xml.dll)


public abstract class XmlReader : IDisposable

NomDescription
System_CAPS_protmethodXmlReader()

Initialise une nouvelle instance de la classe XmlReader.

NomDescription
System_CAPS_pubpropertyAttributeCount

En cas de substitution dans une classe dérivée, obtient le nombre d'attributs du nœud actuel.

System_CAPS_pubpropertyBaseURI

En cas de substitution dans une classe dérivée, obtient l'URI de base du nœud actuel.

System_CAPS_pubpropertyCanReadBinaryContent

Obtient une valeur indiquant si XmlReader implémente les méthodes de lecture de contenu binaire.

System_CAPS_pubpropertyCanReadValueChunk

Obtient une valeur indiquant si XmlReader implémente la méthode ReadValueChunk.

System_CAPS_pubpropertyCanResolveEntity

Obtient une valeur indiquant si ce lecteur peut analyser et résoudre les entités.

System_CAPS_pubpropertyDepth

En cas de substitution dans une classe dérivée, obtient la profondeur du nœud actuel dans le document XML.

System_CAPS_pubpropertyEOF

En cas de substitution dans une classe dérivée, obtient une valeur indiquant si le lecteur est placé à la fin du flux.

System_CAPS_pubpropertyHasAttributes

Obtient une valeur indiquant si le nœud actuel a des attributs.

System_CAPS_pubpropertyHasValue

En cas de substitution dans une classe dérivée, obtient une valeur indiquant si le nœud actuel peut avoir un Value.

System_CAPS_pubpropertyIsDefault

En cas de substitution dans une classe dérivée, obtient une valeur indiquant si le nœud actuel est un attribut généré à partir de la valeur par défaut définie dans le DTD ou le schéma.

System_CAPS_pubpropertyIsEmptyElement

En cas de substitution dans une classe dérivée, obtient une valeur indiquant si le nœud actuel est un élément vide (par exemple, <MyElement/>).

System_CAPS_pubpropertyItem[Int32]

En cas de substitution dans une classe dérivée, obtient la valeur de l'attribut avec l'index spécifié.

System_CAPS_pubpropertyItem[String]

En cas de substitution dans une classe dérivée, obtient la valeur de l’attribut avec la valeur Name.

System_CAPS_pubpropertyItem[String, String]

En cas de substitution dans une classe dérivée, obtient la valeur de l’attribut avec la valeur LocalName et NamespaceURI.

System_CAPS_pubpropertyLocalName

En cas de substitution dans une classe dérivée, obtient le nom local du nœud actuel.

System_CAPS_pubpropertyName

En cas de substitution dans une classe dérivée, obtient le nom qualifié du nœud actuel.

System_CAPS_pubpropertyNamespaceURI

En cas de substitution dans une classe dérivée, obtient l'URI de l'espace de noms (tel qu'il est défini dans la spécification relative aux espaces de noms du W3C) du nœud sur lequel le lecteur est placé.

System_CAPS_pubpropertyNameTable

En cas de substitution dans une classe dérivée, obtient le XmlNameTable associé à cette implémentation.

System_CAPS_pubpropertyNodeType

En cas de substitution dans une classe dérivée, obtient le type du nœud actuel.

System_CAPS_pubpropertyPrefix

En cas de substitution dans une classe dérivée, obtient le préfixe de l'espace de noms associé au nœud actuel.

System_CAPS_pubpropertyQuoteChar

En cas de substitution dans une classe dérivée, obtient le caractère guillemet permettant de délimiter la valeur d'un nœud d'attribut.

System_CAPS_pubpropertyReadState

En cas de substitution dans une classe dérivée, obtient l'état du lecteur.

System_CAPS_pubpropertySchemaInfo

Obtient les informations de schéma qui ont été assignées au nœud actuel à la suite de la validation du schéma.

System_CAPS_pubpropertySettings

Obtient l'objet XmlReaderSettings permettant de créer cette instance de XmlReader.

System_CAPS_pubpropertyValue

En cas de substitution dans une classe dérivée, obtient la valeur texte du nœud actuel.

System_CAPS_pubpropertyValueType

Obtient le type de CLR du nœud actuel.

System_CAPS_pubpropertyXmlLang

En cas de substitution dans une classe dérivée, obtient l’actuel xml:lang étendue.

System_CAPS_pubpropertyXmlSpace

En cas de substitution dans une classe dérivée, obtient l’actuel xml:space étendue.

NomDescription
System_CAPS_pubmethodClose()

En cas de substitution dans une classe dérivée, modifie le ReadState à Closed.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream)

Crée une instance de XmlReader à l’aide du flux spécifié avec les paramètres par défaut.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings)

Crée une instance de XmlReader avec le flux et les paramètres spécifiés.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings, String)

Crée une instance de XmlReader en utilisant le flux, l’URI de base et les paramètres spécifiés.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings, XmlParserContext)

Crée une instance de XmlReader à l’aide du flux, des paramètres et des informations de contexte d’analyse spécifiés.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String)

Crée une instance de XmlReader avec l’URI spécifié.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String, XmlReaderSettings)

Crée une instance de XmlReader en utilisant l’URI et les paramètres spécifiés.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String, XmlReaderSettings, XmlParserContext)

Crée une instance de XmlReader en utilisant l’URI, les paramètres et les informations de contexte spécifiés pour l’analyse.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader)

Crée une instance de XmlReader à l’aide du lecteur de texte spécifié.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings)

Crée une instance de XmlReader à l’aide du lecteur de texte et des paramètres spécifiés.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings, String)

Crée une instance de XmlReader à l’aide du lecteur de texte, des paramètres et de l’URI de base spécifiés.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings, XmlParserContext)

Crée une instance de XmlReader à l’aide du lecteur de texte, des paramètres et des informations de contexte d’analyse spécifiés.

System_CAPS_pubmethodSystem_CAPS_staticCreate(XmlReader, XmlReaderSettings)

Crée une instance de XmlReader à l’aide des paramètres et du lecteur XML spécifiés.

System_CAPS_pubmethodDispose()

Libère toutes les ressources utilisées par l'instance actuelle de la classe XmlReader.

System_CAPS_protmethodDispose(Boolean)

Libère les ressources non managées utilisées par XmlReader et libère éventuellement les ressources managées.

System_CAPS_pubmethodEquals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.(Hérité de Object.)

System_CAPS_protmethodFinalize()

Autorise un objet à tenter de libérer des ressources et d'exécuter d'autres opérations de nettoyage avant qu'il ne soit récupéré par l'opération garbage collection. (Hérité de Object.)

System_CAPS_pubmethodGetAttribute(Int32)

En cas de substitution dans une classe dérivée, obtient la valeur de l'attribut avec l'index spécifié.

System_CAPS_pubmethodGetAttribute(String)

En cas de substitution dans une classe dérivée, obtient la valeur de l’attribut avec la valeur Name.

System_CAPS_pubmethodGetAttribute(String, String)

En cas de substitution dans une classe dérivée, obtient la valeur de l’attribut avec la valeur LocalName et NamespaceURI.

System_CAPS_pubmethodGetHashCode()

Fait office de fonction de hachage par défaut.(Hérité de Object.)

System_CAPS_pubmethodGetType()

Obtient le Type de l'instance actuelle.(Hérité de Object.)

System_CAPS_pubmethodGetValueAsync()

Obtient de façon asynchrone la valeur du nœud actuel.

System_CAPS_pubmethodSystem_CAPS_staticIsName(String)

Retourne une valeur indiquant si l’argument de chaîne est un nom XML valide.

System_CAPS_pubmethodSystem_CAPS_staticIsNameToken(String)

Retourne une valeur indiquant si l’argument de chaîne est un jeton de nom XML valide.

System_CAPS_pubmethodIsStartElement()

Appels MoveToContent et vérifie si le nœud de contenu actuel est une balise de début ou une balise d’élément vide.

System_CAPS_pubmethodIsStartElement(String)

Appels MoveToContent et vérifie si le nœud de contenu actuel est une balise de début ou une balise d’élément vide et si la Name la propriété de l’élément trouvé correspond à l’argument donné.

System_CAPS_pubmethodIsStartElement(String, String)

Appels MoveToContent et vérifie si le nœud de contenu actuel est une balise de début ou une balise d’élément vide et si le LocalName et NamespaceURI Propriétés de l’élément trouvé correspondent aux chaînes spécifiées.

System_CAPS_pubmethodLookupNamespace(String)

En cas de substitution dans une classe dérivée, résout un préfixe de l'espace de noms dans la portée de l'élément actuel.

System_CAPS_protmethodMemberwiseClone()

Crée une copie superficielle du Object actuel.(Hérité de Object.)

System_CAPS_pubmethodMoveToAttribute(Int32)

En cas de substitution dans une classe dérivée, se déplace vers l'attribut avec l'index spécifié.

System_CAPS_pubmethodMoveToAttribute(String)

En cas de substitution dans une classe dérivée, se déplace vers l’attribut avec la valeur Name.

System_CAPS_pubmethodMoveToAttribute(String, String)

En cas de substitution dans une classe dérivée, se déplace vers l’attribut avec la valeur LocalName et NamespaceURI.

System_CAPS_pubmethodMoveToContent()

Vérifie si le nœud actuel est un contenu (texte non espace blanc, CDATA, Element, EndElement, EntityReference, ou EndEntity) nœud. Si le nœud n'est pas un nœud de contenu, le lecteur avance jusqu'au nœud de contenu suivant ou jusqu'à la fin du fichier. Il ignore les nœuds possédant les types suivants : ProcessingInstruction, DocumentType, Comment, Whitespace ou SignificantWhitespace.

System_CAPS_pubmethodMoveToContentAsync()

Vérifie de façon asynchrone si le nœud actuel est un nœud de contenu. Si le nœud n'est pas un nœud de contenu, le lecteur avance jusqu'au nœud de contenu suivant ou jusqu'à la fin du fichier.

System_CAPS_pubmethodMoveToElement()

En cas de substitution dans une classe dérivée, se déplace vers l'élément contenant le nœud d'attribut actuel.

System_CAPS_pubmethodMoveToFirstAttribute()

En cas de substitution dans une classe dérivée, se déplace vers le premier attribut.

System_CAPS_pubmethodMoveToNextAttribute()

En cas de substitution dans une classe dérivée, se déplace vers l'attribut suivant.

System_CAPS_pubmethodRead()

En cas de substitution dans une classe dérivée, lit le nœud suivant à partir du flux.

System_CAPS_pubmethodReadAsync()

Lit de façon asynchrone le nœud suivant à partir du flux de données.

System_CAPS_pubmethodReadAttributeValue()

En cas de substitution dans une classe dérivée, analyse la valeur d’attribut dans un ou plusieurs Text, EntityReference, ou EndEntity nœuds.

System_CAPS_pubmethodReadContentAs(Type, IXmlNamespaceResolver)

Lit le contenu en tant qu'objet du type spécifié.

System_CAPS_pubmethodReadContentAsAsync(Type, IXmlNamespaceResolver)

Lit de façon asynchrone le contenu en tant qu'objet du type spécifié.

System_CAPS_pubmethodReadContentAsBase64(Byte[], Int32, Int32)

Lit le contenu et retourne les octets binaires décodés au format Base64.

System_CAPS_pubmethodReadContentAsBase64Async(Byte[], Int32, Int32)

Lit de façon asynchrone le contenu et retourne les octets binaires décodés au format Base64.

System_CAPS_pubmethodReadContentAsBinHex(Byte[], Int32, Int32)

Lit le contenu et retourne les octets binaires décodés au format BinHex.

System_CAPS_pubmethodReadContentAsBinHexAsync(Byte[], Int32, Int32)

Lit le contenu de façon asynchrone et retourne le BinHex octets binaires décodés.

System_CAPS_pubmethodReadContentAsBoolean()

Lit le contenu de texte à la position actuelle comme un Boolean.

System_CAPS_pubmethodReadContentAsDateTime()

Lit le contenu de texte à la position actuelle comme un DateTime objet.

System_CAPS_pubmethodReadContentAsDateTimeOffset()

Lit le contenu de texte à la position actuelle comme un DateTimeOffset objet.

System_CAPS_pubmethodReadContentAsDecimal()

Lit le contenu de texte à la position actuelle comme un Decimal objet.

System_CAPS_pubmethodReadContentAsDouble()

Lit le contenu de texte à la position actuelle en tant que nombre à virgule flottante double précision.

System_CAPS_pubmethodReadContentAsFloat()

Lit le contenu de texte à la position actuelle en tant que nombre à virgule flottante simple précision.

System_CAPS_pubmethodReadContentAsInt()

Lit le contenu de texte à la position actuelle comme un entier signé de 32 bits.

System_CAPS_pubmethodReadContentAsLong()

Lit le contenu de texte à la position actuelle comme un entier signé de 64 bits.

System_CAPS_pubmethodReadContentAsObject()

Lit le contenu de texte à la position actuelle comme un Object.

System_CAPS_pubmethodReadContentAsObjectAsync()

Lit de façon asynchrone le contenu de texte à la position actuelle comme un Object.

System_CAPS_pubmethodReadContentAsString()

Lit le contenu de texte à la position actuelle comme un String objet.

System_CAPS_pubmethodReadContentAsStringAsync()

Lit de façon asynchrone le contenu de texte à la position actuelle comme un String objet.

System_CAPS_pubmethodReadElementContentAs(Type, IXmlNamespaceResolver)

Lit le contenu de l'élément en tant que type demandé.

System_CAPS_pubmethodReadElementContentAs(Type, IXmlNamespaceResolver, String, String)

Vérifie que le nom local spécifié et l'URI de l'espace de noms correspondent à ceux de l'élément actuel, puis lit le contenu d'élément en tant que type demandé.

System_CAPS_pubmethodReadElementContentAsAsync(Type, IXmlNamespaceResolver)

Lit de façon asynchrone le contenu de l'élément en tant que type demandé.

System_CAPS_pubmethodReadElementContentAsBase64(Byte[], Int32, Int32)

Lit l'élément et décode le contenu au format Base64.

System_CAPS_pubmethodReadElementContentAsBase64Async(Byte[], Int32, Int32)

Lit de façon asynchrone l'élément et décode le contenu au format Base64.

System_CAPS_pubmethodReadElementContentAsBinHex(Byte[], Int32, Int32)

Lit l'élément et décode le contenu au format BinHex.

System_CAPS_pubmethodReadElementContentAsBinHexAsync(Byte[], Int32, Int32)

De façon asynchrone lit l’élément et décode le BinHex contenu.

System_CAPS_pubmethodReadElementContentAsBoolean()

Lit l'élément actuel et retourne le contenu comme un Boolean objet.

System_CAPS_pubmethodReadElementContentAsBoolean(String, String)

Vérifie que le nom local spécifié et l’URI d’espace de noms correspondent à ceux de l’élément actuel, puis lit l’élément actuel et retourne le contenu comme un Boolean objet.

System_CAPS_pubmethodReadElementContentAsDateTime()

Lit l'élément actuel et retourne le contenu comme un DateTime objet.

System_CAPS_pubmethodReadElementContentAsDateTime(String, String)

Vérifie que le nom local spécifié et l’URI d’espace de noms correspondent à ceux de l’élément actuel, puis lit l’élément actuel et retourne le contenu comme un DateTime objet.

System_CAPS_pubmethodReadElementContentAsDecimal()

Lit l'élément actuel et retourne le contenu comme un Decimal objet.

System_CAPS_pubmethodReadElementContentAsDecimal(String, String)

Vérifie que le nom local spécifié et l’URI d’espace de noms correspondent à ceux de l’élément actuel, puis lit l’élément actuel et retourne le contenu comme un Decimal objet.

System_CAPS_pubmethodReadElementContentAsDouble()

Lit l'élément actuel et retourne le contenu en tant que nombre à virgule flottante double précision.

System_CAPS_pubmethodReadElementContentAsDouble(String, String)

Vérifie que le nom local et l'URI de l'espace de noms spécifiés correspondent à ceux de l'élément actuel, puis lit l'élément actuel et retourne le contenu sous la forme d'un nombre à virgule flottante double précision.

System_CAPS_pubmethodReadElementContentAsFloat()

Lit l'élément actuel et retourne le contenu en tant que nombre à virgule flottante simple précision.

System_CAPS_pubmethodReadElementContentAsFloat(String, String)

Vérifie que le nom local et l'URI de l'espace de noms spécifiés correspondent à ceux de l'élément actuel, puis lit l'élément actuel et retourne le contenu sous la forme d'un nombre à virgule flottante simple précision.

System_CAPS_pubmethodReadElementContentAsInt()

Lit l'élément actuel et retourne le contenu comme un entier signé de 32 bits.

System_CAPS_pubmethodReadElementContentAsInt(String, String)

Vérifie que le nom local spécifié et l'URI de l'espace de noms correspondent à ceux de l'élément actuel, puis lit l'élément actuel et retourne le contenu en tant qu'entier signé de 32 bits.

System_CAPS_pubmethodReadElementContentAsLong()

Lit l'élément actuel et retourne le contenu comme un entier signé de 64 bits.

System_CAPS_pubmethodReadElementContentAsLong(String, String)

Vérifie que le nom local spécifié et l'URI de l'espace de noms correspondent à ceux de l'élément actuel, puis lit l'élément actuel et retourne le contenu en tant qu'entier signé de 64 bits.

System_CAPS_pubmethodReadElementContentAsObject()

Lit l’élément actuel et retourne le contenu comme un Object.

System_CAPS_pubmethodReadElementContentAsObject(String, String)

Vérifie que le nom local spécifié et l’URI d’espace de noms correspondent à ceux de l’élément actuel, puis lit l’élément actuel et retourne le contenu comme un Object.

System_CAPS_pubmethodReadElementContentAsObjectAsync()

Lit l’élément actuel de façon asynchrone et retourne le contenu comme un Object.

System_CAPS_pubmethodReadElementContentAsString()

Lit l’élément actuel et retourne le contenu comme un String objet.

System_CAPS_pubmethodReadElementContentAsString(String, String)

Vérifie que le nom local spécifié et l’URI d’espace de noms correspondent à ceux de l’élément actuel, puis lit l’élément actuel et retourne le contenu comme un String objet.

System_CAPS_pubmethodReadElementContentAsStringAsync()

Lit l’élément actuel de façon asynchrone et retourne le contenu comme un String objet.

System_CAPS_pubmethodReadElementString()

Lit un élément texte uniquement. Toutefois, nous vous recommandons d’utiliser la ReadElementContentAsString() méthode à la place, car elle fournit un moyen plus simple de gérer cette opération.

System_CAPS_pubmethodReadElementString(String)

Vérifie que le Name la propriété de l’élément trouvé correspond à la chaîne spécifiée avant de lire un élément de texte. Toutefois, nous vous recommandons d’utiliser la ReadElementContentAsString() méthode à la place, car elle fournit un moyen plus simple de gérer cette opération.

System_CAPS_pubmethodReadElementString(String, String)

Vérifie que le LocalName et NamespaceURI les propriétés de l’élément trouvent correspond aux chaînes spécifiées avant de lire un élément de texte. Toutefois, nous vous recommandons d’utiliser la ReadElementContentAsString(String, String) méthode à la place, car elle fournit un moyen plus simple de gérer cette opération.

System_CAPS_pubmethodReadEndElement()

Vérifie que le nœud de contenu actuel est une étiquette de fin et avance le lecteur jusqu’au nœud suivant.

System_CAPS_pubmethodReadInnerXml()

En cas de substitution dans une classe dérivée, lit tout le contenu, y compris le balisage, sous forme de chaîne.

System_CAPS_pubmethodReadInnerXmlAsync()

Lit de façon asynchrone tout le contenu, notamment le balisage, en tant que chaîne.

System_CAPS_pubmethodReadOuterXml()

En cas de substitution dans une classe dérivée, lit le contenu, y compris le balisage, représentant ce nœud et tous ses enfants.

System_CAPS_pubmethodReadOuterXmlAsync()

Lit de façon asynchrone le contenu, notamment le balisage, qui représente ce nœud et tous ses enfants.

System_CAPS_pubmethodReadStartElement()

Vérifie que le nœud actuel est un élément et avance le lecteur jusqu'au nœud suivant.

System_CAPS_pubmethodReadStartElement(String)

Vérifie que le nœud de contenu actuel est un élément avec la donnée Name et avance le lecteur jusqu’au nœud suivant.

System_CAPS_pubmethodReadStartElement(String, String)

Vérifie que le nœud de contenu actuel est un élément avec la donnée LocalName et NamespaceURI et avance le lecteur jusqu’au nœud suivant.

System_CAPS_pubmethodReadString()

En cas de substitution dans une classe dérivée, lit le contenu d'un nœud d'élément ou de texte sous forme de chaîne. Toutefois, nous vous recommandons d’utiliser la ReadElementContentAsString méthode à la place, car elle fournit un moyen plus simple de gérer cette opération.

System_CAPS_pubmethodReadSubtree()

Retourne un nouveau XmlReader instance qui peut être utilisé pour lire le nœud actuel et tous ses descendants.

System_CAPS_pubmethodReadToDescendant(String)

Avance le XmlReader vers l’élément descendant suivant portant le nom qualifié spécifié.

System_CAPS_pubmethodReadToDescendant(String, String)

Avance le XmlReader vers l’élément descendant suivant avec le nom local spécifié et l’URI d’espace de noms.

System_CAPS_pubmethodReadToFollowing(String)

Lit jusqu'à trouver un élément avec le nom qualifié spécifié.

System_CAPS_pubmethodReadToFollowing(String, String)

Lit jusqu'à trouver un élément avec le nom local et l'URI de l'espace de noms spécifiés.

System_CAPS_pubmethodReadToNextSibling(String)

Avance le XmlReader vers l’élément frère suivant portant le nom qualifié spécifié.

System_CAPS_pubmethodReadToNextSibling(String, String)

Avance XmlReader vers l’élément frère suivant doté du nom local et de l’URI de l’espace de noms spécifiés.

System_CAPS_pubmethodReadValueChunk(Char[], Int32, Int32)

Lit des flux de texte volumineux incorporés dans un document XML.

System_CAPS_pubmethodReadValueChunkAsync(Char[], Int32, Int32)

Lit de façon asynchrone des flux de texte volumineux incorporés dans un document XML.

System_CAPS_pubmethodResolveEntity()

En cas de substitution dans une classe dérivée, résout la référence d’entité pour EntityReference nœuds.

System_CAPS_pubmethodSkip()

Ignore les enfants du nœud actuel.

System_CAPS_pubmethodSkipAsync()

Ignore de façon asynchrone les enfants du nœud actuel.

System_CAPS_pubmethodToString()

Retourne une chaîne qui représente l'objet actuel.(Hérité de Object.)

System_CAPS_noteRemarque

Pour afficher le code source .NET Framework pour ce type, consultez la Reference Source. Vous pouvez parcourir le code source en ligne, télécharger la référence hors connexion et parcourir les sources (y compris les correctifs et mises à jour) pendant le débogage ; see instructions.

XmlReader fournit un accès avant uniquement et en lecture seule aux données XML dans un document ou flux de données. Cette classe est conforme à la W3C Extensible Markup Language (XML) 1.0 (fourth edition) et Namespaces in XML 1.0 (third edition) recommandations.

XmlReaderméthodes vous permettent de parcourir les données XML et de lire le contenu d’un nœud. Les propriétés de la classe reflètent la valeur du nœud actuel, c'est-à-dire dans lequel le lecteur est positionné. Le ReadState valeur de la propriété indique l’état actuel du lecteur XML. Par exemple, la propriété est définie Initial par la XmlReader.Read méthode et Closed par le XmlReader.Close (méthode). XmlReader fournit également des vérifications de conformité des données et la validation par rapport à une DTD ou un schéma.

XmlReaderutilise un modèle d’extraction pour extraire des données. Ce modèle :

  • Simplifie la gestion de l’état par une amélioration de procédure naturelle de haut en bas.

  • Prend en charge plusieurs flux d’entrée et la superposition.

  • Permet au client de donner à l’analyseur une mémoire tampon dans laquelle la chaîne est écrite directement et évite ainsi la nécessité d’une copie de la chaîne supplémentaire.

  • Traitement sélectif prend en charge. Le client peut ignorer des éléments et traiter celles qui présentent un intérêt pour l’application. Vous pouvez également définir des propriétés à l’avance afin de gérer le mode de traitement du flux XML (par exemple, normalization).

Dans cette section :

Création d’un lecteur XML
Validation des données XML
Conformité des données
Parcourir les nœuds
Éléments XML de lecture
Attributs de lecture de XML
Contenu de la lecture de XML
Conversion en types CLR
Programmation asynchrone
Considérations relatives à la sécurité

Utilisez le Create pour créer un XmlReaderinstance.

Bien que le .NET Framework fournit des implémentations concrètes de la XmlReader classe, telles que le XmlTextReader, XmlNodeReader, et le XmlValidatingReader classes, nous vous recommandons d’utiliser les classes spécialisées uniquement dans ces scénarios :

  • Lorsque vous souhaitez readan la sous-arborescence DOM XML à partir d’un XmlNode de l’objet, utilisez la XmlNodeReader classe. (Toutefois, cette classe ne prend en charge la validation DTD ou le schéma.)

  • Si vous devez développer des entités sur demande, vous ne voulez pas le texte de votre contenu normalisées, ou vous ne souhaitez pas les attributs retournés par défaut, utilisez la XmlTextReader classe.

Pour spécifier l’ensemble de fonctionnalités à activer sur le lecteur XML, passez un System.Xml.XmlReaderSettings de l’objet à le Create (méthode). Vous pouvez utiliser un seul System.Xml.XmlReaderSettings pour créer plusieurs lecteurs avec la même fonctionnalité de l’objet, ou modifier le System.Xml.XmlReaderSettingsobjet pour créer un nouveau lecteur avec un autre ensemble de fonctionnalités. Vous pouvez facilement ajouter des fonctionnalités à un lecteur existant.

Si vous n’utilisez pas unSystem.Xml.XmlReaderSettingsde l’objet, les paramètres par défaut sont utilisés. Consultez le Create page de référence pour plus d’informations.

XmlReader lève une XmlException erreurs d’analyse XML. Après qu’une exception est levée, l’état du lecteur n’est pas prévisible. Par exemple, le type de nœud rapporté peut différer du type réel du nœud actuel. Utilisez le ReadState propriété pour vérifier si le lecteur est dans un état d’erreur.

Pour définir la structure d’un document XML et ses relations entre les éléments, les types de données et les contraintes de contenu, vous utilisez une définition de type de document (DTD) ou un schéma XML Schema definition language (XSD). Est considéré comme un document XML est correctement construit s’il répond à toutes les exigences syntaxiques définies par le W3C XML 1.0 Recommendation. Il est considéré comme valide si elle est correctement construit et conforme aux limites définies par sa DTD ou son schéma. (Voir la W3C XML Schema Part 1: Structures et W3C XML Schema Part 2: Datatypesrecommandations.) Par conséquent, même si tous les documents XML valides sont construits correctement, tous les documents XML construits correctement ne sont pas valides.

Vous pouvez valider les données par rapport à une DTD, un schéma XSD inline ou un schéma XSD est stocké dans un XmlSchemaSet objet (cache) ; ces scénarios sont décrits dans le Create page de référence. XmlReader ne prend pas en charge la validation de schéma XML-Data Reduced (XDR).

Vous utilisez les paramètres suivants sur la XmlReaderSettings classe pour spécifier le type de validation, le cas échéant, leXmlReader instance prend en charge.

Utilisez cette XmlReaderSettings membre

Pour spécifier

DtdProcessing propriété

Si vous souhaitez autoriser le traitement DTD. Par défaut, le traitement DTD n'est pas autorisé.

Propriété ValidationType

Si le lecteur doit valider les données et le type de validation à effectuer (DTD ou schéma). Par défaut, les données ne sont pas validées.

ValidationEventHandler événement

Un gestionnaire d’événements pour recevoir des informations sur les événements de validation. Si aucun gestionnaire d'événements n'est fourni, un objet XmlException est levé sur la première erreur de validation.

Propriété ValidationFlags

Options de validation supplémentaires via les XmlSchemaValidationFlags membres d’énumération :

  • AllowXmlAttributes--Autorise les attributs XML (xml:*) dans des documents d’instance même lorsqu’ils ne sont pas définis dans le schéma. Les attributs sont validés en fonction de leur type de données. Consultez le XmlSchemaValidationFlags page de référence pour le paramètre à utiliser dans des scénarios spécifiques. (Désactivé par défaut).

  • ProcessIdentityConstraints --Traite les contraintes d’identité (xs:ID, xs:IDREF, xs:key, xs:keyref, xs:unique) rencontrés pendant la validation. (Activé par défaut).

  • ProcessSchemaLocation --Traiter les schémas spécifiés par le xsi:schemaLocation ou xsi:noNamespaceSchemaLocation attribut. (Activé par défaut).

  • ProcessInlineSchema--Traiter inline schémas XML lors de la validation. (Désactivé par défaut).

  • ReportValidationWarnings--Événements de rapport si un avertissement de validation se produit. Un avertissement est généralement émis lorsqu'un attribut ou élément particulier ne peut être validé par rapport à aucun schéma XML ou aucune DTD. Le ValidationEventHandler est utilisé pour les notifications. (Désactivé par défaut).

Schemas

XmlSchemaSet à utiliser pour la validation.

Propriété XmlResolver

Le XmlResolverpour résoudre et accéder aux ressources externes. Cela peut inclure des entités externes, telles que des DTD et des schémas et les xs:include ou xs:import éléments contenus dans le schéma XML. Si vous ne spécifiez pas un XmlResolver, le XmlReader utilise une valeur par défaut XmlUrlResolver sans informations d’identification de l’utilisateur.

Lecteurs XML qui sont créés par le Create methodmeet les exigences de conformité suivants par défaut :

  • De nouvelles lignes et la valeur d’attribut sont normalisés selon le W3C XML 1.0 Recommendation.

  • Toutes les entités sont développées automatiquement.

  • Attributs par défaut déclarés dans la définition de type de document sont toujours ajoutés même lorsque le lecteur ne valide pas.

  • Déclaration de préfixe XML mappée à l’URI d’espace de noms XML correct est autorisée.

  • Les noms de notations dans une seule NotationType déclaration d’attribut etNmTokens dans un seul Enumeration attribut declarationare distinct.

Utilisez ces XmlReaderSettings Propriétés pour spécifier le type de mise en conformité vérifie que vous souhaitez activer :

Utilisez cette XmlReaderSettings propriété

Vers

default

Propriété CheckCharacters

Activer ou désactiver les contrôles pour les éléments suivants :

  • Caractères se trouvent dans la plage de caractères XML légaux, définis par le 2.2 Characters section de la recommandation W3C XML 1.0.

  • Tous les noms XML sont valides, comme défini par le 2.3 Common Syntactic Constructs section de la recommandation W3C XML 1.0.

Lorsque cette propriété a la valeur true (valeur par défaut), un XmlException exception est levée si le fichier XML contient des caractères non valides ou des noms XML non valides (par exemple, un nom d’élément commence par un nombre).

Vérification du nom et caractère est activée.

Définition de CheckCharacters à false désactive la vérification des références d’entité de caractère de caractères. Si le lecteur traite des données de texte, il vérifie toujours que les noms XML sont valides, indépendamment de ce paramètre.

System_CAPS_noteRemarque

La recommandation XML 1.0 nécessite une conformité au niveau du document lorsqu'une DTD est présente. Par conséquent, si le lecteur est configuré pour prendre en charge ConformanceLevel.Fragment, mais les données XML contient une définition de type de document (DTD), un XmlException est levée.

Propriété ConformanceLevel

Choisissez le niveau de conformité à appliquer :

Si les données ne sont pas conformes, un XmlException exception est levée.

Document

Le nœud actuel est le nœud XML sur lequel le lecteur XML est actuellement positionné. Tous les XmlReaderméthodes exécutent des opérations par rapport à ce nœud et tous les XmlReaderpropriétés reflètent la valeur du nœud actuel.

Les méthodes suivantes permettent de naviguer parmi les nœuds et analyser les données.

Utilisez cette XmlReaderSettings (méthode)

Vers

Read

Lire le premier nœud et avancer dans le nœud d’un flux de données à la fois. Ces appels sont généralement effectués dans un while boucle.

Utilisez le NodeType propriété pour obtenir le type (par exemple, attributs, commentaire, élément, etc.) du nœud actuel.

Skip

Ignorez les enfants du nœud actuel et accédez au nœud suivant.

MoveToContent et MoveToContentAsync

Ignorer des nœuds sans contenu et le déplacer vers le nœud de contenu suivant ou à la fin du fichier.

Les nœuds de contenu non incluent ProcessingInstruction, DocumentType, Comment, Whitespace, et SignificantWhitespace.

Nœuds de contenu comprennent un texte non espace blanc, CDATA, EntityReference , etEndEntity.

ReadSubtree

Lire un élément et tous ses enfants et retourner une nouvelle XmlReader instance définie sur ReadState.Initial.

Cette méthode est utile pour créer des limites autour des éléments XML ; par exemple, si vous souhaitez passer à un autre composant pour le traitement des données et vous souhaitez limiter le volume de vos données, le composant peut accéder.

Consultez le XmlReader.Read page de référence pour obtenir un exemple de naviguer dans un un nœud flux de texte à la fois et d’afficher le type de chaque nœud.

Les sections suivantes décrivent comment vous pouvez lire des types de données, telles que des éléments, des attributs spécifiques et des données typées.

Le tableau suivant répertorie les méthodes et propriétés qui la XmlReader classe fournit pour le traitement des éléments. Une fois l'objet XmlReader positionné sur un élément, les propriétés du nœud, telles que Name, reflètent les valeurs de l'élément. Outre les membres décrits ci-dessous, toutes les propriétés et méthodes générales de la classe XmlReader peuvent également être utilisées pour le traitement des éléments. Par exemple, vous pouvez utiliser la méthode ReadInnerXml pour lire le contenu d'un élément.

System_CAPS_noteRemarque

Consultez la section 3.1 de la W3C XML 1.0 Recommendation pour les définitions de balises de début, fin et autres balises élément vide.

Utilisez cette XmlReader membre

Vers

Méthode IsStartElement

Vérifiez si le nœud actuel est une balise de début ou une balise d’élément vide.

Méthode ReadStartElement

Vérifiez que le nœud actuel est un élément et avance le lecteur jusqu’au nœud suivant (appels IsStartElement suivie Read).

Méthode ReadEndElement

Vérifiez que le nœud actuel est une balise de fin et avance le lecteur jusqu’au nœud suivant.

Méthode ReadElementString

Lire un élément de texte.

Méthode ReadToDescendant

Avance le lecteur XML pour l’élément descendant (enfant) suivant porte le nom spécifié.

Méthode ReadToNextSibling

Avance le lecteur XML pour l’élément frère suivant portant le nom spécifié.

Propriété IsEmptyElement

Vérifiez si l’élément actuel a une balise d’élément de fin. Exemple :

  • <item num="123"/> (La propriété IsEmptyElement est true.)

  • <item num="123"> </item> (IsEmptyElement est false, bien que le contenu de l’élément est vide.)

Pour obtenir un exemple de lire le contenu texte des éléments, consultez la ReadString méthode. L’exemple suivant traite les éléments en utilisant un while boucle.

while (reader.Read()) {
  if (reader.IsStartElement()) {
    if (reader.IsEmptyElement)
      Console.WriteLine("<{0}/>", reader.Name);
    else {
      Console.Write("<{0}> ", reader.Name);
      reader.Read(); // Read the start tag.
      if (reader.IsStartElement())  // Handle nested elements.
        Console.Write("\r\n<{0}>", reader.Name);
      Console.WriteLine(reader.ReadString());  //Read the text content of the element.
    }
  } 
} 

Attributs XML les plus couramment utilisés sur les éléments, mais elles sont également autorisées sur la déclaration XML et les nœuds de type de document.

Lorsque vous êtes positionné sur un nœud d’élément, la MoveToAttribute méthode vous permet de parcourir la liste des attributs de l’élément. Notez qu’après MoveToAttribute a été appelée, les propriétés de nœud comme Name, NamespaceURI, et Prefix reflètent les propriétés de l’attribut, pas les propriétés de l’élément de l’attribut appartient.

La XmlReader classe fournit ces méthodes et propriétés pour lire et traiter des attributs d’éléments.

Utilisez cette XmlReader membre

Vers

Propriété HasAttributes

Vérifiez si le nœud actuel possède des attributs.

Propriété AttributeCount

Obtenir le nombre d’attributs sur l’élément actuel.

Méthode MoveToFirstAttribute

Déplacer vers le premier attribut dans un élément.

Méthode MoveToNextAttribute

Déplacer vers l’attribut suivant dans un élément.

Méthode MoveToAttribute

Déplacer vers un attribut spécifié.

GetAttribute méthode ou Item propriété

Obtenir la valeur d’un attribut spécifié.

Propriété IsDefault

Vérifiez si le nœud actuel est un attribut généré à partir de la valeur par défaut définie dans la DTD ou le schéma.

Méthode MoveToElement

Déplacer vers l’élément qui possède l’attribut actuel. Utilisez cette méthode pour retourner à un élément après avoir navigué dans ses attributs.

Méthode ReadAttributeValue

Analyser la valeur d’attribut dans un ou plusieurs Text, EntityReference, ou EndEntitynœuds.

Toutes les méthodes et propriétés XmlReader générales peuvent aussi être utilisées pour traiter des attributs. Par exemple, une fois que l'objet XmlReader a été positionné sur un attribut, les propriétés Name et Value reflètent les valeurs de cet attribut. Vous pouvez aussi utiliser les méthodes Read de contenu pour obtenir la valeur de l'attribut.

Cet exemple utilise le AttributeCount propriété pour parcourir tous les attributs d’un élément.

// Display all attributes.
if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  for (int i = 0; i < reader.AttributeCount; i++) {
    Console.WriteLine("  {0}", reader[i]);
  }
  // Move the reader back to the element node.
  reader.MoveToElement(); 
}

Cet exemple utilise le MoveToNextAttribute méthode dans un while boucle pour naviguer dans les attributs.

if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  while (reader.MoveToNextAttribute()) {
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}

Lecture d’attributs sur des nœuds de déclaration XML

Lorsque le lecteur XML est positionné sur un nœud de déclaration XML, le Value propriété retourne les informations de version, autonome et codage comme une chaîne unique. XmlReader les objets créés par le Create (méthode), la XmlTextReader (classe) et la XmlValidatingReaderclasse exposent la version, autonome et codage des éléments en tant qu’attributs.

Lecture d’attributs sur les nœuds de type de document

Lorsque le lecteur XML est positionné sur un nœud de type de document, la GetAttribute méthode et Item propriété peut être utilisée pour retourner les valeurs pour les littéraux SYSTEM et PUBLIC. Par exemple, un appel reader.GetAttribute("PUBLIC") retourne la valeur PUBLIC.

Lecture des attributs sur les nœuds d’instruction de traitement

Lorsque l'objet XmlReader est positionné sur un n_œud d'instruction de traitement, la propriété Value retourne tout le contenu textuel. Les éléments dans le nœud d’instruction de traitement ne sont pas traités comme des attributs. Ils ne peuvent pas être lus avec le GetAttribute ou MoveToAttribute (méthode).

La classe XMLReader inclut les membres suivants à lire le contenu d’un fichier XML et retournent le contenu en tant que valeurs de chaîne. (Pour retourner des types CLR, consultez la section suivante.)

Utilisez cette XmlReader membre

Vers

Propriété Value

Obtenir le contenu de texte du nœud actuel. La valeur retournée varie selon le type de nœud ; consultez le Value page de référence pour plus d’informations.

Méthode ReadString

Obtenir le contenu d’un nœud d’élément ou de texte sous forme de chaîne. Cette méthode arrête de traitement des instructions et des commentaires.

Pour plus d’informations sur la façon dont cette méthode gère les types de nœud spécifique, consultez le ReadString page de référence.

Méthodes ReadInnerXml et ReadInnerXmlAsync

Obtenir tout le contenu du nœud actuel, y compris le balisage, mais sans les balises de début et de fin. Par exemple, pour :

<node>this<child id="123"/></node>

ReadInnerXml Retourne :

this<child id="123"/>

Méthodes ReadOuterXml et ReadOuterXmlAsync

Obtenir tout le contenu du nœud actuel et ses enfants, y compris les balises de début et de fin et de balisage. Par exemple, pour :

<node>this<child id="123"/></node>

ReadOuterXml Retourne :

<node>this<child id="123"/></node>

Vous pouvez utiliser les membres de la XmlReader classe (répertoriée dans le tableau suivant) pour lire les données XML et types de retour valeurs en tant que le common language runtime (CLR) au lieu des chaînes. Ces membres permettent d’obtenir les valeurs dans la représentation est plus appropriée pour votre tâche de codage sans devoir analyser manuellement ou de convertir des valeurs de chaîne.

  • Le ReadElementContentAs méthodes peuvent uniquement être appelées sur des types de nœud d’élément. Elles peuvent être utilisées pour des éléments qui comportent des éléments enfants ou du contenu mixte. S'il est appelé, l'objet XmlReader lit la balise de début et le contenu de l'élément, puis avance jusqu'après la balise d'élément de fin. Les instructions de traitement et les commentaires sont ignorés et les entités sont développées.

  • Le ReadContentAsméthodes lire le contenu de texte à la position actuelle du lecteur et si les données XML n’aient pas de schéma ou les informations associées, de type de données de convertir le contenu de texte pour le type de retour demandé. Le texte, les espaces blancs, les espaces blancs significatifs et les sections CDATA sont concaténés. Les commentaires et instructions de traitement sont ignorées et les références d’entité sont automatiquement résolues.

La XmlReader classe utilise les règles définies par le W3C XML Schema Part 2: Datatypesrecommandation.

Utilisez cette XmlReader(méthode)

Pour retourner ce type CLR

ReadContentAsBoolean et ReadElementContentAsBoolean

Boolean

ReadContentAsDateTime et ReadElementContentAsDateTime

DateTime

ReadContentAsDouble et ReadElementContentAsDouble

Double

ReadContentAsLong et ReadElementContentAsLong

Int64

ReadContentAsInt et ReadElementContentAsInt

Int32

ReadContentAsString et ReadElementContentAsString

String

ReadContentAs et ReadElementContentAs

Le type que vous spécifiez avec le returnType paramètre

ReadContentAsObject et ReadElementContentAsObject

Type le plus approprié, tel que spécifié par le XmlReader.ValueType propriété. Consultez Prise en charge du type dans les classes System.Xml Pour plus d’informations de mappage.

Si un élément ne peut pas être facilement converti en un type CLR en raison de son format, vous pouvez utiliser un mappage de schéma pour garantir la réussite de la conversion. L’exemple suivant utilise un fichier .xsd pour convertir le hire-date élément à la xs:date type, puis utilise le ReadElementContentAsDateTime pour renvoyer l’élément en tant que méthode un DateTime objet.

Entrée (hireDate.xml) :

<employee xmlns="urn:empl-hire">
    <ID>12365</ID>
    <hire-date>2003-01-08</hire-date>
    <title>Accountant</title>
</employee>

Schéma (hireDate.xsd) :

<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:empl-hire" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ID" type="xs:unsignedShort" />
        <xs:element name="hire-date" type="xs:date" />
        <xs:element name="title" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Code :

// Create a validating XmlReader object. The schema 
// provides the necessary type information.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (XmlReader reader = XmlReader.Create("hireDate.xml", settings)) {

  // Move to the hire-date element.
  reader.MoveToContent();
  reader.ReadToDescendant("hire-date");

  // Return the hire-date as a DateTime object.
  DateTime hireDate = reader.ReadElementContentAsDateTime();
  Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}

Sortie :

Six Month Review Date:  7/8/2003 12:00:00 AM

La plupart de la XmlReader méthodes ont des équivalents asynchrones qui ont « Async » à la fin de leur nom de méthode. Par exemple, l’équivalent asynchrone de ReadContentAsObject est ReadContentAsObjectAsync.

Les méthodes suivantes peuvent être utilisées avec les appels de méthode asynchrones :

Les sections suivantes décrivent l’utilisation asynchrone pour les méthodes qui n’ont pas équivalents asynchrones.

ReadStartElement, méthode

public static async Task ReadStartElementAsync(this XmlReader reader, string localname, string ns)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.Element)
    {
        throw new InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType");
    }
    if ((reader.LocalName == localname) && (reader.NamespaceURI == ns))
    {
        await reader.ReadAsync();
    }
    else
    {
        throw new InvalidOperationException("localName or namespace doesn’t match");
    }
}

ReadEndElement (méthode)

public static async Task ReadEndElementAsync(this XmlReader reader)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.EndElement)
    {
        throw new InvalidOperationException();
    }
    await reader.ReadAsync();
}

ReadToNextSibling (méthode)

public static async Task<bool> ReadToNextSiblingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the next sibling
    XmlNodeType nt;
    do
    {
        await reader.SkipAsync();
        if (reader.ReadState != ReadState.Interactive)
            break;
        nt = reader.NodeType;
        if (nt == XmlNodeType.Element &&
             ((object)localName == (object)reader.LocalName) &&
             ((object)namespaceURI ==(object)reader.NamespaceURI))
        {
            return true;
        }
    } while (nt != XmlNodeType.EndElement && !reader.EOF);

    return false;
}

ReadToFollowing (méthode)

public static async Task<bool> ReadToFollowingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find element with that name
    while (await reader.ReadAsync())
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}

ReadToDescendant (méthode)

public static async Task<bool> ReadToDescendantAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }
    // save the element or root depth
    int parentDepth = reader.Depth;
    if (reader.NodeType != XmlNodeType.Element)
    {
        // adjust the depth if we are on root node
        if (reader.ReadState == ReadState.Initial)
        {
            parentDepth--;
        }
        else
        {
            return false;
        }
    }
    else if (reader.IsEmptyElement)
    {
        return false;
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the descendant
    while (await reader.ReadAsync() && reader.Depth > parentDepth)
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}

Considérez les éléments suivants lorsque vous travaillez avec la XmlReader classe :

  • Les exceptions levées à partir de la XmlReader peut divulguer des informations de chemin d’accès que vous ne souhaitez ne peut-être pas propagées dans votre application. Votre application doit intercepter les exceptions et les traiter correctement.

  • N’activez pas le traitement DTD si vous êtes préoccupé par déni de service ou si vous avez affaire à des sources non approuvées. Le traitement DTD est désactivé par défaut pour XmlReader les objets créés par le Create (méthode).

    Si le traitement DTD est activé, vous pouvez utiliser l'objet XmlSecureResolver pour limiter les ressources auxquelles l'objet XmlReader peut avoir accès. Vous pouvez également concevoir votre application afin que le traitement XML de la mémoire est limité et de temps. Par exemple, vous pouvez configurer des limites de délai d’attente dans votre application ASP.NET.

  • Les données XML peuvent inclure des références à des ressources externes telles qu'un fichier de schéma. Par défaut, les ressources externes sont résolues en utilisant un XmlUrlResolver objet sans informations d’identification de l’utilisateur. Vous pouvez renforcer la sécurité en procédant comme suit :

  • Le ProcessInlineSchema et ProcessSchemaLocation des indicateurs de validation d’une XmlReaderSettings objet ne sont pas définies par défaut. Cela contribue à protéger l'objet XmlReader contre les attaques basées sur des schémas lorsqu'il traite des données XML provenant d'une source non fiable. Lorsque ces indicateurs sont activés, la propriété XmlResolver de l'objet XmlReaderSettings est utilisée pour résoudre les emplacements de schéma rencontrés dans le document d'instance dans l'objet XmlReader. Si la XmlResolver est définie sur null, les emplacements de schéma ne sont pas résolus même si les ProcessInlineSchema et ProcessSchemaLocation les indicateurs de validation sont définis.

    Les schémas ajoutés lors de la validation ajoutent de nouveaux types et peuvent changer le résultat de la validation du document en cours de validation. Par conséquent, les schémas externes ne devraient être résolus que s'ils proviennent de sources fiables.

    Nous recommandons de désactiver la ProcessIdentityConstraints indicateur lors de la validation des documents XML volumineux non fiables, dans les scénarios de haute disponibilité par rapport à un schéma qui a des contraintes d’identité sur une grande partie du document. Cet indicateur est activé par défaut.

  • Les données XML peuvent contenir un grand nombre d'attributs, de déclarations d'espaces de noms, d'éléments imbriqués, etc. exigeant un temps de traitement long. Pour limiter la taille de l’entrée qui est envoyée à la XmlReader, vous pouvez :

    • Limiter la taille du document en définissant le MaxCharactersInDocument propriété.

    • Limiter le nombre de caractères résultant du développement des entités en définissant le MaxCharactersFromEntities propriété.

    • Créer un personnalisé IStream implémentation pour le XmlReader.

  • Le ReadValueChunk méthode peut être utilisée pour gérer de grands flux de données. Cette méthode lit un petit nombre de caractères à la fois au lieu d'allouer une seule chaîne à toute la valeur.

  • Lors de la lecture d’un document XML avec un grand nombre de noms locaux uniques, d’espaces de noms ou de préfixes, un problème peut se produire. Si vous utilisez une classe qui dérive de XmlReader, et que vous appelez le LocalName, Prefix, ou NamespaceURI propriété pour chaque élément, la chaîne retournée est ajoutée à un NameTable. La collection détenue par le NameTable ne diminue jamais en taille et crée une fuite de mémoire virtuelle des handles de chaîne. Une solution pour cela consiste à dériver à partir de la NameTable classe et appliquez un quota de taille maximale. (Il n’existe aucun moyen pour empêcher l’utilisation d’un NameTable, ou pour changer de la NameTable lorsqu’il est plein). Atténuation une autre consiste à éviter d’utiliser les propriétés mentionnées et utilisez plutôt le MoveToAttribute méthode avec la IsStartElement méthode si possible ; ces méthodes ne retourner des chaînes et éviter ainsi le problème consistant à la NameTable collection.

  • Les objets XmlReaderSettings peuvent contenir des informations confidentielles telles que des informations d'identification de l'utilisateur. Un composant non fiable pourrait utiliser l'objet XmlReaderSettings et ses informations d'identification pour créer des objets XmlReader afin de lire des données. Soyez prudent lors de la mise en cache XmlReaderSettings des objets, ou lorsque vous passez le XmlReaderSettings l’objet d’un composant à un autre.

  • N'acceptez pas les composants de prise en charge, tels que les objets NameTable, XmlNamespaceManager et XmlResolver provenant d'une source non fiable.

L’exemple de code suivant montre comment utiliser l’analyse de APIto XML asynchrone.

async Task TestReader(System.IO.Stream stream)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Async = true;

    using (XmlReader reader = XmlReader.Create(stream, settings))
    {
        while (await reader.ReadAsync())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    Console.WriteLine("Start Element {0}", reader.Name);
                    break;
                case XmlNodeType.Text:
                    Console.WriteLine("Text Node: {0}",
                             await reader.GetValueAsync());
                    break;
                case XmlNodeType.EndElement:
                    Console.WriteLine("End Element {0}", reader.Name);
                    break;
                default:
                    Console.WriteLine("Other node {0} with value {1}",
                                    reader.NodeType, reader.Value);
                    break;
            }
        }
    }
}

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1

Tous les membres statiques publics ( Shared en Visual Basic) de ce type sont thread-safe. Les membres d’instance n’ont pas la garantie d’être thread-safe.

Retour au début
Afficher: