Características del espacio de nombres en XmlTextWriter

Actualización: November 2007

El uso de espacios de nombres constituye la técnica empleada 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 identificador de recursos uniforme (URI). Los espacios de nombres crean nombres de elementos y atributos únicos en un documento XML.

En la lista siguiente se muestra que la clase XmlTextWriter tiene métodos que permiten a una aplicación declarar espacios de nombres de diferentes formas. Esto incluye la posibilidad de:

  • Declarar espacios de nombres manualmente.

  • Invalidar la declaración de espacio de nombres actual con un espacio de nombres nuevo.

  • Declarar varios espacios de nombres.

Los espacios de nombres se pueden declarar y también se pueden adjuntar prefijos de espacio de nombres a los elementos y atributos. Para escribir prefijos de espacio de nombres para los atributos, se utilizan los métodos siguientes:

  • WriteAttributes

  • WriteAttributeString

  • WriteStartAttribute

Para obtener más información sobre cómo escribir prefijos para atributos, vea Prefijos de espacio de nombres de atributo en XmlTextWriter.

Para escribir prefijos de espacio de nombres para los elementos, se utilizan los métodos siguientes:

  • WriteElement

  • WriteElementString

  • WriteStartElement

Para obtener más información sobre cómo escribir prefijos para elementos, vea Prefijos de espacio de nombres de elementos en XmlTextWriter.

El sistema de escritura mantiene una pila de espacios de nombres que permite realizar el seguimiento de los espacios definidos por un elemento. En el ejemplo de código siguiente se muestra el uso de la pila de espacios de nombres cuando se escriben los elementos.

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

Resultados

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

En el ejemplo siguiente se muestra lo que sucede cuando se utiliza una declaración duplicada de espacio de nombres en un elemento anidado. Observe que el elemento item vacío de la salida no repite la declaración del espacio de nombres.

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

Resultados

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

Declaración manual de un espacio de nombres con XmlTextWriter

Las declaraciones de espacios de nombres se pueden escribir manualmente con el fin de optimizar varias declaraciones. En el ejemplo de código siguiente se muestra cómo optimizar el número de declaraciones de espacios de nombres.

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

Resultados

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

En el ejemplo de código anterior se promovió la declaración del espacio de nombres al elemento root, para evitar tener duplicados en los dos elementos secundarios. Los elementos item también obtienen el prefijo de la declaración del espacio de nombres.

Invalidación de la declaración de espacio de nombres con XmlTextWriter

En el ejemplo de código siguiente se muestra cómo invalidar manualmente el espacio de nombres asociado con un prefijo determinado. Tenga en cuenta que el valor order invalida el URI original del espacio de nombres de 123. Esto permite al espacio de nombres ser refinado en un nuevo ámbito de elemento.

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

Resultados

<x:node xmlns:x="order"/>

Múltiples declaraciones de espacios de nombres con XmlTextWriter

Cuando hay varias declaraciones de espacios de nombres, que asignan prefijos diferentes al Nombre de recurso universal (URN), la clase XmlWriter acude a la pila de declaraciones de espacios de nombres para elegir el más próximo. En el ejemplo de código siguiente se muestra cómo el método WriteAttributeString no especifica ningún prefijo, de modo que XmlWriter busca primero el prefijo y.

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

Resultados

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

Vea también

Conceptos

Creación de código XML correcto con XmlTextWriter

Formato de salida XML con XmlTextWriter

Referencia

XmlTextWriter

XmlTextWriter

XmlWriter

XmlWriter

Otros recursos

Escribir XML con XmlWriter