Gestion de l'espace de noms dans XmlWriter
Les espaces de noms sont utilisés 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. Les espaces de noms garantissent l'unicité des noms d'attributs et d'éléments dans un document XML.
L'objet XmlWriter conserve une pile d'espaces de noms correspondant à tous les espaces de noms définis dans la portée actuelle. Lors de l'écriture des éléments et attributs, vous pouvez utiliser les espaces de noms comme suit :
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 ;
spécifier un préfixe d'espace de noms lors de l'écriture des attributs ou éléments.
Déclaration manuelle des espaces de noms
Les déclarations d'espaces de noms peuvent être écrites manuellement à l'aide de la méthode WriteAttributeString. Cela peut s'avérer utile si vous savez comment optimiser le nombre de déclarations d'espaces de noms. Dans le code suivant, une déclaration d'espace de noms est créée sur l'élément racine.
writer.WriteStartElement("root")
writer.WriteAttributeString("xmlns", "x", Nothing, "urn:1")
writer.WriteStartElement("item", "urn:1")
writer.WriteEndElement()
writer.WriteStartElement("item", "urn:1")
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteStartElement("root");
writer.WriteAttributeString("xmlns", "x", null, "urn:1");
writer.WriteStartElement("item", "urn:1");
writer.WriteEndElement();
writer.WriteStartElement("item", "urn:1");
writer.WriteEndElement();
writer.WriteEndElement();
Le code génère la chaîne XML suivante.
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</root>
La déclaration d'espace de noms étant située sur l'élément root, elle n'est pas dupliquée sur les deux éléments enfants. Les éléments item reprennent également le préfixe de la déclaration d'espace de noms.
Remplacement des espaces de noms actuels
Il est possible de remplacer manuellement l'espace de noms associé à un préfixe donné. Dans le code suivant, l'URI d'espace de noms du préfixe "x" passe de "123" à "abc".
writer.WriteStartElement("x", "root", "123")
writer.WriteStartElement("item")
writer.WriteAttributeString("xmlns", "x", Nothing, "abc")
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteStartElement("x", "root", "123");
writer.WriteStartElement("item");
writer.WriteAttributeString("xmlns", "x", null, "abc");
writer.WriteEndElement();
writer.WriteEndElement();
Le code génère la chaîne XML suivante :
<x:root xmlns:x="123">
<item xmlns:x="abc" />
</x:root>
Spécification d'un préfixe d'espace de noms
Vous pouvez également transmettre le préfixe d'espace de noms à utiliser en spécifiant explicitement un préfixe lors de l'écriture d'un élément ou attribut. Bon nombre des méthodes utilisées pour écrire des éléments et attributs permettent de spécifier un préfixe d'espace de noms. Le code suivant indique comment spécifier un préfixe lors de l'écriture d'un élément.
writer.WriteStartElement("x", "root", "urn:1")
writer.WriteStartElement("y", "item", "urn:1")
writer.WriteEndElement()
writer.WriteEndElement()
writer.WriteStartElement("x", "root", "urn:1");
writer.WriteStartElement("y", "item", "urn:1");
writer.WriteEndElement();
writer.WriteEndElement();
Le code écrit la chaîne XML suivante :
<x:root xmlns:x="urn:1">
<y:item xmlns:y="urn:1"/>
</x:root>
L'objet XmlWriter préserve les deux préfixes, "x" et "y".
Remarque |
---|
Toutes les implémentations XmlWriter, notamment l'objet XmlTextWriter, permettent de vider l'espace de noms lorsqu'un préfixe est spécifié.Dans ce cas, le writer ignore le préfixe.Il s'agit d'un changement de comportement de Microsoft .NET Framework version 2.0.Dans les versions précédentes, cette condition entraîne la levée de l'objet XmlException. |