Partager via


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".

RemarqueRemarque

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.

Voir aussi

Autres ressources

Écriture de XML avec XmlWriter