Cette documentation est archivée et n’est pas conservée.

XmlTextWriter, classe

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.

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

public class XmlTextWriter : XmlWriter
public class XmlTextWriter extends XmlWriter
public class XmlTextWriter extends XmlWriter

Cette classe implémente la classe XmlWriter.

RemarqueRemarque

Dans la version Microsoft .NET Framework version 2.0, la méthode recommandée consiste à créer des instances XmlWriter à l'aide de la méthode System.Xml.XmlWriter.Create et de la classe XmlWriterSettings. Cela vous permet de tirer pleinement parti de toutes les nouvelles fonctionnalités incluses dans cette version. Pour plus d'informations, consultez Création de writers XML.

XmlTextWriter gère une pile d'espaces de noms correspondant à tous les espaces de noms définis dans la pile d'éléments en cours. À l'aide de XmlTextWriter, vous pouvez déclarer des espaces de noms manuellement.

 w.WriteStartElement("root");
 w.WriteAttributeString("xmlns", "x", null, "urn:1");
  w.WriteStartElement("item","urn:1");
  w.WriteEndElement();
  w.WriteStartElement("item","urn:1");
  w.WriteEndElement();
 w.WriteEndElement();

Le code C# ci-dessus produit la sortie suivante. XmlTextWriter effectue une promotion de la déclaration d'espace de noms vers l'élément racine pour éviter sa duplication sur les deux éléments enfants. Les éléments enfants récupèrent le préfixe de la déclaration d'espace de noms.

 <root xmlns:x="urn:1">
  <x:item/>
  <x:item/>
 </x:root>

XmlTextWriter vous permet également de substituer la déclaration d'espace de noms en cours. Dans l'exemple suivant, l'URI de l'espace de noms "123" est substitué par "abc" pour produire l'élément XML <x:node xmlns:x="abc"/>.

 w.WriteStartElement("x","node","123");
 w.WriteAttributeString("xmlns","x",null,"abc");

En utilisant les méthodes d'écriture qui prennent un préfixe comme argument, vous pouvez également spécifier quel préfixe utiliser. Dans l'exemple suivant, deux préfixes différents sont mappés vers le même URI d'espace de noms pour produire le texte XML <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>.

 XmlTextWriter w = new XmlTextWriter(Console.Out);
 w.WriteStartElement("x","root","urn:1");
  w.WriteStartElement("y","item","urn:1");
  w.WriteEndElement();
 w.WriteEndElement();
 w.Close();

S'il existe plusieurs déclarations d'espaces de noms mappant différents préfixes vers le même URI d'espace de noms, XmlTextWriter parcourt la pile de déclarations d'espaces de noms dans le sens inverse et récupère la plus proche.

 XmlTextWriter w = new XmlTextWriter(Console.Out);
 w.Formatting = Formatting.Indented;
 w.WriteStartElement("x","root","urn:1");
 w.WriteStartElement("y","item","urn:1");
 w.WriteAttributeString("attr","urn:1","123");
 w.WriteEndElement();
 w.WriteEndElement();
 w.Close();

Dans l'exemple C# ci-dessus, l'appel de WriteAttributeString ne spécifie pas de préfixe, par conséquent, le writer utilise le dernier préfixe ayant fait l'objet d'un push dans la pile d'espaces de noms, puis génère le code XML suivant :

 <x:root xmlns:x="urn:1">
  <y:item y:attr="123" xmlns:y="urn:1" />
 </x:root>

Si des conflits d'espaces de noms se produisent, XmlTextWriter les résout en générant des préfixes de remplacement. Par exemple, si un attribut et un élément possèdent le même préfixe mais pas les mêmes espaces de noms, XmlWriter génère un préfixe de remplacement pour l'attribut. Les préfixes générés sont nommés n{i}i est un nombre commençant à 1. Ce nombre est remis à 1 pour chaque élément.

Les attributs associés à un URI d'espace de noms doivent posséder un préfixe (les espaces de noms par défaut ne s'appliquent pas aux attributs). Cette description est conforme à la section 5.2 de la recommandation du W3C intitulée Namespaces in XML. Si un attribut fait référence à un URI d'espace de noms, sans spécifier de préfixe, le writer génère un préfixe pour cet attribut.

Lors de l'écriture d'un élément vide, un espace supplémentaire est ajouté entre le nom de la balise et la balise de fermeture, par exemple <item />. Ceci permet de garantir une compatibilité avec les anciens navigateurs.

Lorsque String est utilisé en tant que paramètre de méthode, référence Null (Nothing en Visual Basic) et String.Empty sont équivalents. String.Empty respecte les règles W3C.

Pour écrire des données fortement typées, utilisez la classe XmlConvert pour convertir les types de données en chaîne. Par exemple, le code C# suivant convertit les données de Double en String et écrit l'élément <price>19.95</price>.

 Double price = 19.95;
 writer.WriteElementString("price", XmlConvert.ToString(price));

XmlTextWriter ne vérifie pas ce qui suit :

  • les caractères non valides dans les noms d'attributs et d'éléments.

  • les caractères Unicode qui ne correspondent pas au codage spécifié. Si les caractères Unicode ne conviennent pas au codage spécifié, XmlTextWriter n'utilise pas des entités de caractères pour l'échappement des caractères Unicode ;

  • les attributs dupliqués ;

  • les caractères contenus dans l'identificateur public DOCTYPE ou l'identificateur de système.

Pour plus d'informations sur l'écriture en XML, consultez Écriture de XML avec XmlWriter.

Considérations sur la sécurité

Les éléments suivants sont à prendre en compte lors de l'utilisation de la classe XmlTextWriter.

  • Les exceptions levées par XmlTextWriter peuvent divulguer des informations relatives au chemin d'accès dont vous ne souhaitez pas qu'elles soient propagées dans l'application. Vos applications doivent intercepter les exceptions et les traiter correctement.

  • Lorsque vous passez XmlTextWriter à une autre application, le flux sous-jacent est exposé à cette application. Si vous devez passer XmlTextWriter à une application de niveau de confiance partiel, vous devez plutôt utiliser un objet XmlWriter créé par la méthode Create.

  • XmlTextWriter ne valide pas les données qui sont passées aux méthodes WriteDocType ou WriteRaw. Vous ne devez pas passer de données arbitraires à ces méthodes.

  • Si les paramètres par défaut sont modifiés, rien ne garantit que la sortie générée se compose de données XML bien formées.

  • N'acceptez pas la prise en charge de composants tels qu'un objet Encoding, provenant d'une source non fiable.

System.Object
   System.Xml.XmlWriter
    System.Xml.XmlTextWriter

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0, 1.1, 1.0

.NET Compact Framework

Prise en charge dans : 2.0, 1.0
Afficher: