Fonctionnalités d'espace de noms de XmlTextWriter
Les espaces de noms sont la technique utilisée pour qualifier des noms d'attributs et d'éléments dans un document XML. Les préfixes d'espaces de noms associent des éléments et des attributs à des espaces de noms, qui sont à leur tour associés à une référence URI (Uniform Resource Identifier). Les espaces de noms garantissent l'unicité des noms d'attributs et d'éléments dans un document XML.
La liste suivante montre que les méthodes de XmlTextWriter permettent à une application de déclarer des espaces de noms de différentes manières. Cela comprend la possibilité de :
déclarer les espaces de noms manuellement ;
substituer la déclaration d'un nouvel espace de noms à celle de l'espace de noms en cours ;
déclarer plusieurs espaces de noms.
Outre la déclaration des espaces de noms, des préfixes d'espaces de noms peuvent être ajoutés aux éléments et aux attributs. L'écriture de préfixes d'espaces de noms pour les attributs utilise les méthodes suivantes :
WriteAttributes
WriteAttributeString
WriteStartAttribute
Pour plus d'informations sur l'écriture de préfixes pour les attributs, voir Préfixes d'espaces de noms d'attributs dans XmlTextWriter.
L'écriture de préfixes d'espaces de noms pour les éléments utilise les méthodes suivantes :
WriteElement ;
WriteElementString ;
WriteStartElement.
Pour plus d'informations sur l'écriture de préfixes pour les éléments, voir Préfixes d'espaces de noms d'éléments dans XmlTextWriter.
Le writer conserve une pile d'espaces de noms qui effectue le suivi des espaces de noms définis par un élément. L'exemple de code suivant montre comment utiliser la pile d'espaces de noms lors de l'écriture d'éléments.
Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("root", "urn:1")
w.WriteStartElement("item", "urn:2")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("root","urn:1");
w.WriteStartElement("item","urn:2");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Sortie
<root xmlns="urn:1">
<item xmlns="urn:2"/>
</root>
L'exemple suivant montre ce qui se passe lorsqu'une déclaration d'espace de noms dupliquée est utilisée sur un élément imbriqué. Notez que l'élément vide item de la sortie ne répète pas la déclaration d'espace de noms.
Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("root", "urn:1")
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("root","urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Sortie
<root xmlns="urn:1"><item/></root>
Déclaration manuelle d'espace de noms avec XmlTextWriter
Les déclarations d'espace de noms peuvent être écrites manuellement pour optimiser le nombre de déclarations. L'exemple de code suivant montre comment optimiser le nombre de déclarations d'espace de noms.
w.WriteStartElement("root")
w.WriteAttributeString("xmlns", "x", Nothing, "urn:1")
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteEndElement()
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();
Sortie
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>
L'exemple de code précédent a promu la déclaration d'espace de noms à l'élément root pour éviter les doublons sur les deux éléments enfants. Les éléments item reprennent aussi le préfixe de la déclaration d'espace de noms.
Substitution d'une déclaration d'espace de noms avec XmlTextWriter
L'exemple de code suivant montre comment substituer manuellement un préfixe donné à l'espace de noms associé. Notez que la valeur order remplace l'URI d'espace de noms original de 123. Cela permet de redéfinir l'espace de noms dans une nouvelle étendue d'élément.
w.WriteStartElement("x", "node", "123")
w.WriteAttributeString("xmlns", "x", Nothing, "order")
w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"order");
Sortie
<x:node xmlns:x="order"/>
Déclarations d'espace de noms multiples avec XmlTextWriter
Lorsque plusieurs déclarations d'espace de noms mappent différents préfixes au même URN (Uniform Resource Name), la classe XmlWriter sélectionne la plus proche en remontant la pile de déclarations d'espace de noms. L'exemple de code suivant montre comment WriteAttributeString n'indique aucun préfixe afin que XmlWriter trouve le préfixe y en premier.
Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("x", "root", "urn:1")
w.WriteStartElement("y", "item", "urn:1")
w.WriteAttributeString("abc", "urn:1", "xyz")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("abc","urn:1","xyz");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Sortie
<x:root xmlns:x="urn:1">
<y:item y:abc="xyz" xmlns:y="urn:1"/>
</x:root>
Voir aussi
Référence
Concepts
Création de XML correctement construit avec XmlTextWriter
Mise en forme d'une sortie XML avec XmlTextWriter