Partager via


Classe System.Xml.XmlTextReader

Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.

Remarque

Nous vous recommandons de créer des instances de XmlReader en utilisant la méthode XmlReader.Create pour tirer parti de nouvelles fonctionnalités.

XmlTextReader fournit un accès vers l’avant uniquement et en lecture seule à un flux de données XML. Le nœud actuel fait référence au nœud sur lequel le lecteur est placé. Le lecteur avance en utilisant une des méthodes de lecture et les propriétés reflètent la valeur du nœud actuel.

Cette classe implémente XmlReader, et est conforme aux recommandations W3C Extensible Markup Language (XML) 1.0 et Espaces de noms dans XML. XmlTextReader offre les fonctionnalités suivantes :

  • Applique les règles du code XML bien formé.

  • XmlTextReader ne fournit pas de validation des données.

  • Vérifie que les nœuds DocumentType sont bien formés. XmlTextReader vérifie que la DTD est bien formée, mais ne valide pas l’utilisation de la DTD.

  • Pour les nœuds où NodeType est XmlNodeType.EntityReference, un nœud vide EntityReference unique est retourné (autrement dit, la Value propriété est String.Empty).

Remarque

Les déclarations réelles d’entités dans la DTD sont appelées des nœuds Entity. Quand vous faites référence à ces nœuds dans vos données, ils sont appelés des nœuds EntityReference.

  • Ne développe pas les attributs par défaut.

Comme le XmlTextReader n’effectue pas les vérifications supplémentaires nécessaires pour la validation des données, il fournit un analyseur rapide de la forme.

Pour effectuer la validation des données, utilisez un XmlReader de validation.

Pour lire des données XML depuis un XmlDocument, utilisez XmlNodeReader.

XmlTextReader lève une exception XmlException sur les erreurs d’analyse XML. Une fois qu’une exception est levée, l’état du lecteur n’est pas prévisible. Par exemple, le type de nœud signalé peut être différent du type de nœud réel du nœud actuel. Utilisez la propriété ReadState pour vérifier si un lecteur est dans un état d’erreur.

Considérations de sécurité

Voici des éléments à prendre en compte lors de l’utilisation de la classe XmlTextReader.

  • Les exceptions levées par XmlTextReader peuvent divulguer des informations de chemin d’accès que vous ne voulez pas voir apparaître dans l’application. Vos applications doivent intercepter les exceptions et les traiter correctement.

  • Le traitement des DTD est activé par défaut. Désactivez le traitement DTD si vous redoutez des problèmes de déni de service ou si vous avez affaire à des sources non approuvées. Définissez la propriété DtdProcessing sur Prohibit pour désactiver le traitement DTD.

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

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

  • 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 envoyée au XmlTextReader, créez une implémentation de IStream personnalisée et fournissez-lui le XmlTextReader.

  • La méthode ReadValueChunk 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.

  • Par défaut, les entités générales ne sont pas développées. Les entités générales sont développées lorsque vous appelez la méthode ResolveEntity.