Control de espacios de nombres en XmlWriter

Actualización: November 2007

Los espacios de nombres se utilizan para certificar nombres de atributos y elementos en un documento XML. Los prefijos de espacio de nombres asocian elementos y atributos con espacios de nombres que, a su vez, se asocian a una referencia de URI. Los espacios de nombres crean nombres de elementos y atributos únicos en un documento XML.

XmlWriter mantiene una pila de espacios de nombres correspondiente a todos los espacios de nombres definidos en el ámbito del espacio de nombres actual. A la hora de escribir elementos y atributos, puede utilizar espacios de nombres de las siguientes formas:

  • Declare espacios de nombres manualmente.

  • Invalide la declaración de espacio de nombres actual por un espacio de nombres nuevo.

  • Especifique un prefijo de espacio de nombres al escribir atributos o elementos.

Declare espacios de nombres manualmente.

Las declaraciones de espacios de nombres se pueden escribir manualmente con el método WriteAttributeString. Esto puede resultar útil si conoce la mejor forma de optimizar el número de declaraciones de espacios de nombres. En el siguiente código se crea una declaración de espacio de nombres en el elemento raíz.

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();

El código genera la siguiente cadena XML.

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

Puesto que la declaración de espacio de nombres se encuentra en el elemento root, no se duplica en los dos elementos secundarios. Los elementos item también obtienen el prefijo de la declaración del espacio de nombres.

Invalide espacios de nombres actuales

Es posible invalidar manualmente el espacio de nombres asociado a un prefijo determinado. En el siguiente código se cambia el identificador URI del espacio de nombres del prefijo "x" de "123" a "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();

El código genera la siguiente cadena XML:

<x:root xmlns:x="123">
  <item xmlns:x="abc" />
</x:root>

Especifique un prefijo de espacio de nombres

También puede pasar el prefijo de espacio de nombres que se va a utilizar especificando explícitamente un prefijo cuando escriba un elemento o atributo. Muchos de los métodos que se utilizan para escribir elementos y atributos permiten especificar un prefijo de espacio de nombres. En el siguiente código se muestra cómo especificar un prefijo al escribir un elemento.

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();

El código escribe la siguiente cadena XML:

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

XmlWriter conserva los dos prefijos: "x" y "y".

Nota:

Todas las implementaciones de XmlWriter, incluyendo XmlTextWriter, permiten que el espacio de nombres esté vacío cuando se proporciona un prefijo. En este caso, el sistema de escritura omite el prefijo. Se trata de un cambio de comportamiento de la versión 2.0 de Microsoft .NET Framework. En las versiones anteriores, esta situación daba lugar al inicio de una XmlException.

Vea también

Otros recursos

Escribir XML con XmlWriter