Partager via


System.Xml Espace de noms

Offre une prise en charge basée sur les normes pour le traitement du code XML.

Classes

NameTable

Implémente un XmlNameTable à thread unique.

UniqueId

Identificateur unique optimisé pour les GUID.

XmlAttribute

Représente un attribut. Les valeurs valides et par défaut de l'attribut sont définies dans une définition de type de document (DTD) ou dans un schéma.

XmlAttributeCollection

Représente une collection d'attributs qui sont accessibles par nom ou index.

XmlBinaryReaderSession

Permet la gestion dynamique des chaînes optimisées.

XmlBinaryWriterSession

Permet d'utiliser un dictionnaire dynamique pour compresser des chaînes courantes qui apparaissent dans un message et conserver l'état.

XmlCDataSection

Représente une section CDATA.

XmlCharacterData

Fournit des méthodes de manipulation de texte qui sont utilisées par plusieurs classes.

XmlComment

Représente le contenu d'un commentaire XML.

XmlConvert

Encode et décode les noms XML, et fournit des méthodes pour la conversion entre les types Common Language Runtime et les types XSD (XML Schema Definition). Lors de la conversion de types de données, les valeurs retournées sont indépendantes des paramètres régionaux.

XmlDataDocument

Permet le stockage, la récupération et la manipulation de données structurées par l'entremise d'un DataSet relationnel.

XmlDeclaration

Représente le nœud de déclaration XML <?xml version='1.0'...?>.

XmlDictionary

Implémente un dictionnaire utilisé pour optimiser les implémentations de lecteur/writer XML de WCF (Windows Communication Foundation).

XmlDictionaryReader

Classe abstract que WCF (Windows Communication Foundation) dérive de XmlReader pour procéder à la sérialisation et à la désérialisation.

XmlDictionaryReaderQuotas

Contient des valeurs de quota configurables pour les XmlDictionaryReaders.

XmlDictionaryString

Représente une entrée stockée dans un XmlDictionary.

XmlDictionaryWriter

Représente une classe abstraite que WCF (Windows Communication Foundation) dérive de XmlWriter pour procéder à la sérialisation et à la désérialisation.

XmlDocument

Représente un document XML. Vous pouvez utiliser cette classe pour charger, valider, modifier, ajouter et positionner du contenu XML dans un document.

XmlDocumentFragment

Représente un objet rudimentaire utilisé dans les opérations d'insertion dans les arborescences.

XmlDocumentType

Représente la déclaration du type de document.

XmlDocumentXPathExtensions

Fournit les méthodes d’extension de XmlDocument et de XmlNode pour la navigation dans les documents.

XmlElement

Représente un élément.

XmlEntity

Représente une déclaration d’entité, telle que <!ENTITY... >.

XmlEntityReference

Représente un nœud de référence d'entité.

XmlException

Retourne des informations détaillées sur la dernière exception.

XmlImplementation

Définit le contexte pour un jeu d'objets XmlDocument.

XmlLinkedNode

Obtient le nœud qui précède ou suit immédiatement ce nœud.

XmlNamedNodeMap

Représente une collection de nœuds qui sont accessibles par nom ou index.

XmlNamespaceManager

Résout des espaces de noms dans une collection, ajoute des espaces de noms à une collection, en supprime et gère la portée de ces espaces de noms.

XmlNameTable

Table d'objets de chaînes atomisées.

XmlNode

Représente un nœud unique dans le document XML.

XmlNodeChangedEventArgs

Fournit des données pour les événements NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved et NodeRemoving.

XmlNodeList

Représente une collection ordonnée de nœuds.

XmlNodeReader

Représente un lecteur fournissant un accès aux données XML par un flux rapide, non mis en cache et avant uniquement dans XmlNode.

XmlNotation

Représente une déclaration de notation, telle que <! NOTATION...>.

XmlParserContext

Fournit toutes les informations de contexte requises par XmlReader pour analyser un fragment XML.

XmlProcessingInstruction

Représente une instruction de traitement, définie par le code XML pour conserver les informations spécifiques au processeur dans le texte du document.

XmlQualifiedName

Représente un nom qualifié XML.

XmlReader

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

XmlReaderSettings

Spécifie un jeu de fonctionnalités à prendre en charge sur l'objet XmlReader créé par la méthode Create.

XmlResolver

Résout les ressources XML externes nommées par un URI (Uniform Resource Identifier).

XmlSecureResolver

Aide à sécuriser une autre implémentation de XmlResolver en incluant dans un wrapper l'objet XmlResolver et en limitant les ressources auxquelles le XmlResolver sous-jacent a accès.

XmlSignificantWhitespace

Représente un espace blanc entre le balisage d'un nœud de contenu mixte ou un espace blanc dans une portée xml:space= 'preserve'. Ceci est quelquefois appelé aussi espace blanc significatif.

XmlText

Représente le contenu texte d'un élément ou attribut.

XmlTextReader

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

À compter de .NET Framework 2.0, nous vous recommandons d'utiliser plutôt la classe XmlReader.

XmlTextWriter

Représente un writer qui fournit un procédé rapide, sans mise en cache et en avant uniquement de génération de flux de fichiers contenant des données XML ; ce procédé est conforme aux recommandations du W3C intitulées Extensible Markup Language (XML) 1.0 et Namespace in XML.

À compter de .NET Framework 2.0, nous vous recommandons d'utiliser plutôt la classe XmlWriter.

XmlUrlResolver

Résout les ressources XML externes nommées par un URI (Uniform Resource Identifier).

XmlValidatingReader

Représente un lecteur fournissant une validation de définition de type de document (DTD), de schéma XDR (XML-Data Reduced) et en langage XSD (XML Schema Definition).

Cette classe est obsolète. À compter de .NET Framework 2.0, nous vous recommandons d'utiliser la classe XmlReaderSettings et la méthode Create pour créer un lecteur XML de validation.

XmlWhitespace

Représente un espace blanc dans un contenu d'élément.

XmlWriter

Représente un writer qui fournit un moyen rapide, sans mise en cache et en avant de générer des flux de données ou des fichiers contenant des données XML.

XmlWriterSettings

Spécifie un jeu de fonctionnalités à prendre en charge sur l'objet XmlWriter créé par la méthode Create.

XmlXapResolver

Le type XmlXapResolver sert à résoudre les ressources contenues dans le package XAP de l’application Silverlight.

Interfaces

IApplicationResourceStreamResolver

Représente un programme de résolution de flux de données des ressources de l'application.

IFragmentCapableXmlDictionaryWriter

Contient des propriétés et des méthodes qui permettent le traitement de fragments XML lorsqu'elles sont implémentées par un XmlDictionaryWriter.

IHasXmlNode

Permet à une classe de retourner un XmlNode à partir du contexte en cours ou de la position actuelle.

IStreamProvider

Représente une interface qui peut être implémentée par les classes qui fournissent des flux de données.

IXmlBinaryReaderInitializer

Fournit des méthodes permettant de réinitialiser un lecteur binaire pour la lecture d'un nouveau document.

IXmlBinaryWriterInitializer

Spécifie les implémentations nécessaires pour les writers binaires XML qui dérivent de cette interface.

IXmlDictionary

interface qui définit le contrat qu'un dictionnaire XML doit implémenter pour être utilisé par les implémentations XmlDictionaryReader et XmlDictionaryWriter.

IXmlLineInfo

Fournit une interface pour permettre à une classe de retourner des informations de ligne et de position.

IXmlMtomReaderInitializer

Spécifie les implémentations nécessaires pour les lecteurs XML MTOM qui dérivent de cette interface.

IXmlMtomWriterInitializer

Lorsqu'elle est implémentée par un enregistreur MTOM, cette interface garantit l'initialisation pour ce type d'enregistreur.

IXmlNamespaceResolver

Fournit un accès en lecture seule à un jeu de mappages de préfixes et d'espaces de noms.

IXmlTextReaderInitializer

Spécifie les implémentations nécessaires pour les lecteurs de texte XML qui dérivent de cette interface.

IXmlTextWriterInitializer

Spécifie les implémentations nécessaires pour les writers de texte XML qui dérivent de cette interface.

Énumérations

ConformanceLevel

Spécifie l’ampleur des contrôles d’entrée ou de sortie que les objets XmlReader et XmlWriter effectuent.

DtdProcessing

Spécifie les options de traitement des DTD. L'énumération DtdProcessing est utilisée par la classe XmlReaderSettings.

EntityHandling

Spécifie comment XmlTextReader ou XmlValidatingReader gèrent les entités.

Formatting

Spécifie les options de mise en forme pour le XmlTextWriter.

NamespaceHandling

Spécifie si vous souhaitez supprimer les déclarations d'espace de noms en double dans le XmlWriter.

NewLineHandling

Spécifie comment gérer les sauts de ligne.

ReadState

Spécifie l'état du lecteur.

ValidationType

Spécifie le type de validation à effectuer.

WhitespaceHandling

Spécifie la façon dont est géré l'espace blanc.

WriteState

Spécifie l'état de la classe XmlWriter.

XmlDateTimeSerializationMode

Spécifie la façon de traiter la valeur d'heure lors de la conversion entre chaîne et DateTime.

XmlDictionaryReaderQuotaTypes

Énumère les valeurs de quota configurables pour les XmlDictionaryReaders.

XmlNamespaceScope

Définit la portée des espaces de noms.

XmlNodeChangedAction

Spécifie le type de modification du nœud.

XmlNodeOrder

Décrit l'ordre des documents dans un nœud comparé à un second nœud.

XmlNodeType

Spécifie le type de nœud.

XmlOutputMethod

Spécifie la méthode utilisée pour sérialiser la sortie XmlWriter.

XmlSpace

Spécifie la portée xml:space en cours.

XmlTokenizedType

Représente le type XML de la chaîne. Cela permet ainsi de lire la chaîne selon un type XML particulier, par exemple un type de section CDATA.

Délégués

OnXmlDictionaryReaderClose

delegate pour une méthode de rappel lors de la fermeture du lecteur.

XmlNodeChangedEventHandler

Représente la méthode qui gère les événements NodeChanged, NodeChanging, NodeInserted, NodeInserting, NodeRemoved et NodeRemoving.

Remarques

Normes prises en charge

L’espace System.Xml de noms prend en charge ces normes :

Consultez la section Différences par rapport aux spécifications W3C pour deux cas dans lesquels les classes XML diffèrent des recommandations du W3C.

.NET fournit également d’autres espaces de noms pour les opérations liées à XML. Pour obtenir une liste, des descriptions et des liens, consultez espaces de nomsSystem.Xml.

Traitement asynchrone du code XML

Les System.Xml.XmlReader classes et System.Xml.XmlWriter incluent un certain nombre de méthodes asynchrones basées sur le modèle de programmation asynchrone. Ces méthodes peuvent être identifiées par la chaîne « Async » à la fin de leur nom. Avec ces méthodes, vous pouvez écrire du code asynchrone similaire à votre code synchrone, et vous pouvez facilement migrer votre code synchrone existant vers du code asynchrone.

  • Utilisez les méthodes asynchrones dans les applications où la latence de flux réseau est importante. Évitez d’utiliser les API asynchrones pour les opérations de lecture/écriture de flux de mémoire ou de flux de fichiers locaux. Le flux d’entrée, XmlTextReader, et XmlTextWriter doit également prendre en charge les opérations asynchrones. Sinon, les threads seront toujours bloqués par les opérations d’E/S.

  • Nous vous déconseillons de mélanger les appels de fonction synchrones et asynchrones, car vous risquez d’oublier d’utiliser le await mot clé ou d’utiliser une API synchrone où une api asynchrone est nécessaire.

  • Ne définissez pas l’indicateur XmlReaderSettings.Async ou XmlWriterSettings.Async sur true si vous n’avez pas l’intention d’utiliser une méthode asynchrone.

  • Si vous oubliez de spécifier le await mot clé lorsque vous appelez une méthode asynchrone, les résultats ne sont pas déterministes : vous pouvez recevoir le résultat attendu ou une exception.

  • Lorsqu’un XmlReader objet lit un nœud de texte volumineux, il peut mettre en cache uniquement une valeur de texte partielle et retourner le nœud de texte. La récupération de la XmlReader.Value propriété peut donc être bloquée par une opération d’E/S. Utilisez la XmlReader.GetValueAsync méthode pour obtenir la valeur de texte en mode asynchrone, ou utilisez la XmlReader.ReadValueChunkAsync méthode pour lire un bloc de texte volumineux en blocs.

  • Lorsque vous utilisez un XmlWriter objet, appelez la XmlWriter.FlushAsync méthode avant d’appeler XmlWriter.Close pour éviter de bloquer une opération d’E/S.

Différences par rapport aux spécifications du W3C

Dans deux cas qui impliquent des contraintes sur les composants de schéma de groupe de modèles, l’espace System.Xml de noms diffère des recommandations du W3C.

Cohérence dans les déclarations d’éléments :

Dans certains cas, lorsque des groupes de substitution sont utilisés, l’implémentation System.Xml ne satisfait pas la spécification « Contrainte de composant de schéma : déclarations d’éléments cohérentes », qui est décrite dans la section Contraintes sur les composants de schéma de groupe de modèles de la spécification W3C.

Par exemple, le schéma suivant inclut des éléments qui ont le même nom, mais des types différents dans le même modèle de contenu, et des groupes de substitution sont utilisés. Cela doit provoquer une erreur, mais System.Xml compile et valide le schéma sans erreurs.

<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

   <xs:element name="e1" type="t1"/>
   <xs:complexType name="t1"/>

   <xs:element name="e2" type="t2" substitutionGroup="e1"/>
      <xs:complexType name="t2">
         <xs:complexContent>
            <xs:extension base="t1">
         </xs:extension>
      </xs:complexContent>
   </xs:complexType>

   <xs:complexType name="t3">
      <xs:sequence>
         <xs:element ref="e1"/>
         <xs:element name="e2" type="xs:int"/>
      </xs:sequence>
   </xs:complexType>
</xs:schema>

Dans ce schéma, le type t3 contient une séquence d'éléments. En raison de la substitution, la référence à l'élément e1 de la séquence peut générer soit un élément e1 de type t1, soit un élément e2 de type t2. Ce dernier cas entraînerait une séquence de deux e2 éléments, où l’un est de type t2 et l’autre de type xs:int.

Attribution de particules unique :

Dans les conditions suivantes, l’implémentation System.Xml ne satisfait pas à la « contrainte de composant de schéma : attribution unique de particules », qui est décrite dans la section Contraintes sur les composants de schéma de groupe de modèles de la spécification W3C.

  • L'un des éléments du groupe fait référence un autre élément.

  • L'élément référencé est un élément head d'un groupe de substitution.

  • Le groupe de substitution contient un élément qui porte le même nom que l’un des éléments du groupe.

  • La cardinalité de l’élément qui référence l’élément principal du groupe de substitution et l’élément portant le même nom qu’un élément de groupe de substitution n’est pas fixe (minOccurs < maxOccurs).

  • La définition de l’élément qui fait référence au groupe de substitution précède la définition de l’élément portant le même nom qu’un élément de groupe de substitution.

Par exemple, dans le schéma ci-dessous le modèle de contenu est ambigu et doit provoquer une erreur de compilation, mais System.Xml compile le schéma sans erreurs.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:element name="e1" type="xs:int"/>
  <xs:element name="e2" type="xs:int" substitutionGroup="e1"/>

  <xs:complexType name="t3">
    <xs:sequence>
      <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
      <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="e3" type="t3"/>
</xs:schema>

Si vous essayez de valider le code XML suivant par rapport au schéma ci-dessus, la validation échoue avec le message suivant : « L’élément 'e3' a un élément enfant non valide 'e2'. » et une XmlSchemaValidationException exception est levée.

<e3>
  <e2>1</e2>
  <e2>2</e2>
</e3>

Pour contourner ce problème, vous pouvez permuter les déclarations d’éléments dans le document XSD. Exemple :

<xs:sequence>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

devient cela :

<xs:sequence>
  <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
  <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
</xs:sequence>

Voici un autre exemple du même problème :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
   <xs:element name="e1" type="xs:string"/>
   <xs:element name="e2" type="xs:string" substitutionGroup="e1"/>

   <xs:complexType name="t3">
      <xs:sequence>
         <xs:element ref="e1" minOccurs="0" maxOccurs="1"/>
         <xs:element name="e2" type="xs:int" minOccurs="0" maxOccurs="1"/>
      </xs:sequence>
   </xs:complexType>
   <xs:element name="e3" type="t3"/>
</xs:schema>

Si vous essayez de valider le code XML suivant par rapport au schéma ci-dessus, la validation échoue avec l’exception suivante : « Exception non gérée : System.Xml. Schema.XmlSchemaValidationException : l’élément 'e2' el n’est pas valide - La valeur 'abc' n’est pas valide en fonction de son type 'http://www.w3.org/2001/XMLSchema:int' de données . La chaîne 'abc' n’est pas une valeur Int32 valide. »

<e3><e2>abc</e2></e3>

Considérations relatives à la sécurité

Les types et les membres de l’espace System.Xml de noms s’appuient sur le système de sécurité .NET. Les sections suivantes traitent des problèmes de sécurité spécifiques aux technologies XML.

Notez également que lorsque vous utilisez les System.Xml types et les membres, si le code XML contient des données susceptibles d’avoir des implications sur la confidentialité, vous devez implémenter votre application d’une manière qui respecte la confidentialité de vos utilisateurs finaux.

Accès externe

Plusieurs technologies XML permettent de récupérer d'autres documents pendant le traitement. Par exemple, une définition de type de document (DTD) peut résider dans le document en cours d'analyse. La DTD peut également résider dans un document externe référencé par le document en cours d'analyse. Le langage XSD (XML Schema Definition) et les technologies XSLT permettent également d'inclure des informations provenant d'autres fichiers. Ces ressources externes peuvent présenter des problèmes de sécurité. Par exemple, vous devez vous assurer que votre application récupère des fichiers uniquement à partir de sites de confiance et que le fichier qu’elle récupère ne contient pas de données malveillantes.

La XmlUrlResolver classe est utilisée pour charger des documents XML et pour résoudre des ressources externes telles que des entités, des DTD ou des schémas, et pour importer ou inclure des directives.

Vous pouvez remplacer cette classe et spécifier l’objet XmlResolver à utiliser. La classe XmlSecureResolver doit être utilisée si vous devez ouvrir une ressource non contrôlée ou non fiable. L'objet XmlSecureResolver enveloppe l'objet XmlResolver et permet de limiter les ressources auxquelles l'objet XmlResolver sous-jacent a accès.

Déni de service

Les scénarios suivants sont considérés comme moins vulnérables aux attaques de refus de service car les classes System.Xml fournissent un moyen de protection contre ces attaques.

  • Analyse de données de texte XML

  • Analyse des données XML binaires si les données XML binaires ont été générées par Microsoft SQL Server.

  • Écriture de documents XML et de fragments provenant de sources de données dans le système de fichiers, des flux, un objet TextWriter ou StringBuilder

  • Chargement de documents dans l'objet DOM (Document Object Model) si un objet XmlReader est utilisé et si XmlReaderSettings.DtdProcessing est défini sur DtdProcessing.Prohibit

  • Exploration de l'objet DOM

Les scénarios suivants ne sont pas recommandés en cas de crainte concernant les attaques de refus de service ou d'utilisation d'un environnement non fiable.

  • Traitement DTD

  • Traitement de schéma - Il comprend l’ajout d’un schéma non fiable à la collection de schémas, la compilation d’un schéma non fiable et la validation à l’aide d’un schéma non fiable.

  • Traitement XSLT

  • Analyse de n'importe quel flux arbitraire de données XML binaires fournies par l'utilisateur

  • Opérations DOM telles que l’interrogation, la modification, le déplacement de sous-arborescences entre des documents et l’enregistrement d’objets DOM

Si vous êtes préoccupé par des problèmes de déni de service ou si vous traitez avec des sources non approuvées, n’activez pas le traitement DTD. Cette option est désactivée par défaut sur XmlReader les objets créés par la XmlReader.Create méthode.

Notes

L'objet XmlTextReader permet le traitement DTD par défaut. La propriété XmlTextReader.DtdProcessing permet de désactiver cette fonction.

Si le traitement DTD est activé, vous pouvez utiliser la XmlSecureResolver classe pour restreindre les ressources auxquelles le XmlReader peut accéder. Vous pouvez également concevoir votre application afin que le traitement XML soit limité en mémoire et en temps. Par exemple, vous pouvez configurer des limites de délai d’expiration dans votre application ASP.NET.

Considérations relatives au traitement

Les documents XML pouvant faire référence à d'autres fichiers, il est difficile de déterminer la puissance de traitement nécessaire pour analyser un document XML. Les documents XML peuvent, par exemple, inclure une DTD. Si la DTD comporte des entités imbriquées ou des modèles de contenu complexes, l'analyse du document peut durer longtemps.

Lorsque vous utilisez XmlReader, vous pouvez restreindre la taille du document qu'il sera possible d'analyser en définissant la propriété XmlReaderSettings.MaxCharactersInDocument. Définissez la propriété XmlReaderSettings.MaxCharactersFromEntities pour limiter le nombre maximal de caractères résultant des entités développées. Consultez les rubriques de référence appropriées pour obtenir des exemples de définition de ces propriétés.

Les technologies XSD et XSLT disposent de fonctionnalités supplémentaires qui peuvent affecter les performances de traitement. Par exemple, il est possible de construire un schéma XML nécessitant un traitement relativement long lorsqu'il est évalué en fonction d'un document relativement petit. Il est également possible d'intégrer des blocs de script dans une feuille de style XSLT. Les deux cas représentent une menace de sécurité potentielle pour votre application.

Lorsque vous créez une application qui utilise la XslCompiledTransform classe , vous devez être conscient des éléments suivants et de leurs implications :

  • Le script XSLT est désactivé par défaut. Le script XSLT ne doit être activé que si la prise en charge des scripts est nécessaire et si vous travaillez dans un environnement totalement fiable.

  • La fonction document() XSLT est désactivée par défaut. Si vous activez la fonction document(), limitez les ressources accessibles en transmettant un objet XmlSecureResolver à la méthode XslCompiledTransform.Transform.

  • Les objets d'extension sont activés par défaut. Si un objet XsltArgumentList contenant des objets d’extension est transmis à la méthode XslCompiledTransform.Transform, les objets d’extension sont utilisés.

  • Les feuilles de style XSLT peuvent inclure des références à d'autres fichiers et à des blocs de script intégrés. Un utilisateur malveillant peut exploiter cette fonction en fournissant des données ou feuilles de style qui, une fois exécutées, peuvent entraîner l'exécution du traitement jusqu'à l'épuisement des ressources de l'ordinateur.

  • Les applications XSLT qui s’exécutent dans un environnement de confiance mixte peuvent entraîner une usurpation de feuille de style. Un utilisateur malveillant peut, par exemple, charger un objet avec une feuille de style nuisible et le transmettre à un autre utilisateur qui appelle ensuite la méthode XslCompiledTransform.Transform et exécute la transformation.

Vous pouvez réduire ces problèmes de sécurité en désactivant le script ou la fonction document() sauf si la feuille de style provient d'une source fiable et en refusant les objets XslCompiledTransform, les feuilles de style XSLT ou les données de base XML provenant d'une source non fiable.

Gestion des exceptions

Les exceptions levées par les composants de niveau inférieur peuvent divulguer des informations de chemin que vous ne souhaitez pas exposer à l’application. Vos applications doivent intercepter les exceptions et les traiter de manière appropriée.

Voir aussi