Lecture de XML avec XmlReader
La classe XmlReader est une classe de base abstraite qui fournit un accès non mis en cache, avant uniquement (forward only) et en lecture seule. La classe XmlReader vérifie que le code XML est correctement construit et lève des exceptions XmlException si une erreur est rencontrée. Elle peut lire un flux ou un document et implémente les exigences liées aux espaces de noms décrites dans la recommandation fournie par le W3C à l'adresse www.w3.org/TR/REC-xml-names.
Le fait qu'elle soit une classe de base abstraite vous permet de personnaliser votre propre type de lecteur ou d'étendre les implémentations en cours des classes XmlTextReader, XmlValidatingReader et XmlNodeReader. Cependant, les contraintes de sécurité implémentées dans le .NET Framework version 1.1 sur XmlReader limitent la possibilité d'hériter XmlTextReader et XmlValidatingReader. Dans le .NET Framework version 1.0, tous les composants peuvent hériter de XmlTextReader ou XmlValidatingReader. En implémentant une demande d'héritage sur le constructeur de XmlTextReader et XmlValidatingReader dans le .NET Framework version 1.1, les composants fiables sont désormais les seuls composants capables d'hériter de XmlTextReader ou XmlValidatingReader.
La classe XmlReader définit des méthodes qui vous permettent d'extraire des données de XML ou d'ignorer des enregistrements inutiles. XmlReader n'est pas semblable au modèle SAX qui est un modèle push dans lequel l'analyseur exécute un push sur des événements vers l'application. Pour plus d'informations sur une comparaison avec le modèle SAX, consultez Comparaison entre XmlReader et le lecteur SAX.
La classe XmlReader possède des méthodes pour :
- lire le contenu XML lorsqu'il est disponible dans son intégralité, dans le cas par exemple d'un fichier texte XML ;
- trouver la profondeur de la pile d'éléments XML ;
- déterminer si un élément a un contenu ou s'il est vide ;
- lire les attributs et naviguer entre ceux-ci ;
- ignorer des éléments et leur contenu.
La classe XmlReader possède des propriétés qui retournent des informations, telles que :
- le type et le nom du nœud actuel ;
- le contenu du nœud actuel.
Les implémentations de la classe XmlReader étendent la classe de base. Leur design varie pour prendre en charge différents scénarios. Le tableau ci-après décrit les implémentations de la classe XmlReader.
Classe | |
---|---|
XmlTextReader, classe | Lit les flux de caractères. Il s'agit d'un lecteur avant uniquement qui possède des méthodes retournant des données sur les types de contenu et de nœud. Aucune prise en charge n'est assurée pour la définition de type de document (DTD, Document Type Definition) ou le schéma. |
XmlNodeReader, classe | Fournit un analyseur sur une API DOM XML, comme l'arborescence XmlNode. Prend un XmlNode, retourne les nœuds qu'il trouve dans l'arborescence DOM, y compris les nœuds de référence d'entité. Aucune prise en charge n'est assurée pour la validation DTD ou de schéma, mais des entités définies dans la définition DTD peuvent être résolues. |
XmlValidatingReader, classe | Fournit un analyseur XML validant ou non validant totalement conforme qui prend en charge la DTD, le schéma XSD (XML Schema Definition) ou le schéma XDR (XML-Data Reduced). Prend XmlTextReader et place les services de validation en haut. |
Création de lecteur XML personnalisé | Permet des dérivations de XmlReader définies par un développeur. |
Remarque XmlTextReader et XmlValidatingReader sont limités par la taille des fichiers qu'ils peuvent lire. Ils ne peuvent pas lire de fichiers supérieurs à 2 giga-octets. Dans la mesure du possible, fractionnez le fichier source en plusieurs fichiers plus petits.
XsltReader est une autre implémentation qui n'a pas de constructeur public. Sa création a lieu à la suite de l'appel à la méthode Transform sur la classe XslTransform. XsltReader fournit les fonctionnalités suivantes :
- Applique les règles selon lesquelles le code XML doit être correctement construit.
- N'effectue pas de validation par rapport à des DTD ou des schémas.
- N'étend pas les attributs par défaut, car les informations DTD (nœuds DOCTYPE) ne sont pas exposées dans le modèle de données XPath. Consultez la propriété XmlReader.IsDefault. Si vous avez besoin d'étendre les attributs par défaut dans le document source avant d'appliquer une transformation, vous devez charger le magasin de données (par exemple, XmlDocument) via XmlValidatingReader.
Chacune des classes XmlTextReader, XmlValidatingReader et XmlNodeReader est conçue pour prendre en charge différents scénarios. Le tableau ci-après décrit le lecteur à utiliser pour chaque scénario et la valeur à affecter à la propriété ValidationType.
Scénario | Lecteur à utiliser | Propriété ValidationType |
---|---|---|
Nécessite des performances plus élevées sans besoin de prendre en charge une DTD ou un schéma. | XmlTextReader | Non disponible. |
Requiert que le XML soit correctement construit, y compris les entités externes et les DocType avec une DTD fournie. | XmlTextReader | Non disponible. |
Nécessite que le XML soit valide et correctement construit selon la DTD. | XmlValidatingReader | Auto ou DTD. |
Nécessite que le XML soit correctement construit et validé par rapport à un schéma. | XmlValidatingReader | Auto lorsque aucune DTD n'est disponible, ou schéma XDR. |
Nécessite que le XML soit correctement construit lors de la diffusion en continu de données XML à partir de XmlNode. | XmlNodeReader | Non disponible. |
Le tableau suivant décrit comment définir les propriétés XmlResolver et XmlTextReader.Normalization sur les différents lecteurs pour chaque scénario.
La propriété Normalization, lorsqu'elle a la valeur true, normalise les caractères de fin de ligne dans les nœuds de texte et d'espace blanc, elle normalise également les valeurs d'attribut en fonction de leur type. Par conséquent, si vous affectez la valeur true à la propriété Normalization, les performances seront moindres qu'avec la valeur false, qui est la valeur par défaut. Pour plus d'informations, consultez XmlTextReader.Normalization, propriété.
La propriété XmlResolver est utilisée pour résoudre des ressources externes nommées par un Uri telles qu'une DTD externe ou pour localiser un schéma. Pour plus d'informations sur l'utilisation de la propriété XmlResolver avec les lecteurs différents, consultez Résolution des ressources à l'aide de XmlResolver.
Scénario | XmlResolver | Propriété Normalization |
---|---|---|
Nécessite des performances plus élevées sans besoin de prendre en charge une DTD ou un schéma. | A pour valeur une référence null. Pour plus d'informations, consultez XmlTextReader.XmlResolver, propriété. | A la valeur false. |
Nécessite que le document soit correctement construit, y compris les entités externes et les DocType avec une DTD fournie. | A pour valeur une référence non null. Toutes les entités externes doivent pouvoir être résolues. Pour plus d'informations, consultez XmlTextReader.XmlResolver, propriété. | A la valeur true. |
Nécessite que le document soit correctement construit et que le XML soit valide selon la DTD. | A pour valeur une référence non null. Toutes les entités externes doivent pouvoir être résolues. Pour plus d'informations, consultez XmlValidatingReader.XmlResolver, propriété. | A la valeur true sur XmlTextReader avant d'être passée à XmlValidatingReader. |
Nécessite que le document soit correctement construit et nécessite une validation de schéma. | A pour valeur une référence non null. Toutes les entités externes doivent pouvoir être résolues. Pour plus d'informations, consultez XmlValidatingReader.XmlResolver, propriété. | A la valeur true sur XmlTextReader avant d'être passée à XmlValidatingReader. |
Nécessite que le document soit correctement construit lors de la diffusion en continu de données XML à partir de XmlNode. | Non disponible. | Non disponible. |
XmlValidatingReader fournit des services de validation sur XmlTextReader. Pour plus d'informations, consultez Validation XML à l'aide de XmlValidatingReader.
Voir aussi
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 | 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, membres