Partager via


Classe System.Xml.XmlTextReader

Cet article fournit des remarques supplémentaires à la documentation de référence de cette API.

Remarque

Nous vous recommandons de créer des instances XmlReader à l’aide de la méthode XmlReader.Create pour tirer parti de nouvelles fonctionnalités.

XmlTextReader fournit un accès 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 positionné. Le lecteur est avancé à l’aide de l’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 au langage XML (W3C Extensible Markup Language) 1.0 et aux espaces de noms dans les recommandations XML. XmlTextReader fournit 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 correctement 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 d'entités réelles dans la DTD sont appelées Entity nodes. Lorsque vous faites référence à ces nœuds dans vos données, ils sont appelés EntityReference nœuds.

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

Étant donné que le XmlTextReader n'effectue pas les vérifications supplémentaires requises pour la validation des données, il fournit un analyseur de bonne formation rapide.

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

Pour lire des données XML à partir d’un XmlDocument, utilisez XmlNodeReader.

XmlTextReader lance un XmlException en cas d'erreur 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 ReadState propriété pour vérifier si un lecteur est dans un état d’erreur.

Considérations relatives à la sécurité

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

  • Les exceptions levées par le XmlTextReader peuvent divulguer des informations sur le chemin que vous ne souhaitez pas faire remonter à l'application. Vos applications doivent intercepter les exceptions et les traiter de manière appropriée.

  • Le traitement DTD est activé par défaut. Désactivez le traitement DTD si vous êtes préoccupé par les problèmes de déni de service ou si vous traitez avec des sources non approuvées. Définissez la propriété DtdProcessing sur Prohibit pour désactiver le traitement de la DTD.

    Si le traitement DTD est activé, vous pouvez utiliser la XmlSecureResolver méthode pour restreindre les ressources auxquelles l’accès XmlTextReader est possible. Vous pouvez également concevoir votre application afin que le traitement XML soit limité en mémoire et en temps. Par exemple, configurez les 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 DTD. Par défaut, les ressources externes sont résolues à l’aide d’un XmlUrlResolver objet sans informations d’identification utilisateur. Vous pouvez le sécuriser davantage en effectuant l’une des opérations suivantes :

  • Les données XML peuvent contenir un grand nombre d’attributs, de déclarations d’espace de noms, d’éléments imbriqués, et ainsi de suite, qui nécessitent un temps important de traitement. Pour limiter la taille de l’entrée envoyée au XmlTextReader, créez une implémentation IStream personnalisée et fournissez-la XmlTextReader.

  • La 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 pour la valeur entière.

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