XmlTextWriter (Clase) (System.Xml)

Cambiar vista:
Sin script
Biblioteca de clases de .NET Framework
XmlTextWriter (Clase)

Actualización: noviembre 2007

Representa un sistema de escritura que proporciona un medio rápido, sin almacenamiento en caché y con desplazamiento sólo hacia delante para generar secuencias o archivos con datos XML que satisface las recomendaciones relativas a espacios de nombres en XML y Extensible Markup Language (XML) 1.0 del Consorcio W3C.

Espacio de nombres:  System.Xml
Ensamblado:  System.Xml (en System.Xml.dll)
Sintaxis

Visual Basic (Declaración)
Public Class XmlTextWriter _
	Inherits XmlWriter
Visual Basic (Uso)
Dim instance As XmlTextWriter
C#
public class XmlTextWriter : XmlWriter
Visual C++
public ref class XmlTextWriter : public XmlWriter
J#
public class XmlTextWriter extends XmlWriter
JScript
public class XmlTextWriter extends XmlWriter
Comentarios

Esta clase implementa la clase XmlWriter.

w703ce6s.alert_note(es-es,VS.90).gif Nota:

En la versión .NET Framework versión 2.0, se recomienda crear instancias de XmlWriter mediante el método XmlWriter.Create y la clase XmlWriterSettings. De esta forma, puede aprovechar al máximo todas las nuevas funciones presentadas en esta versión. Para obtener más información, vea Creación de sistemas de escritura XML.

XmlTextWriter mantiene una pila de espacios de nombres correspondiente a todos los espacios de nombres definidos en la pila de elementos actual. Mediante XmlTextWriter se pueden declarar manualmente los espacios de nombres.

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

El código C# anterior produce el resultado siguiente. XmlTextWriter promociona la declaración de espacio de nombres al elemento raíz para evitar que esté duplicada en los dos elementos secundarios. Los elementos secundarios toman el prefijo de la declaración de espacio de nombres.

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

XmlTextWriter también permite reemplazar la declaración de espacio de nombres actual. En el ejemplo siguiente, el identificador URI de espacio de nombres "123" se reemplaza por "abc" para generar el elemento XML <x:node xmlns:x="abc"/>.

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

Mediante los métodos de escritura que toman un prefijo como argumento, también se puede especificar qué prefijo se va a utilizar. En el siguiente ejemplo, se asignan dos prefijos diferentes al mismo identificador URI de espacio de nombres para generar el texto XML <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>.

 XmlTextWriter w = new XmlTextWriter(Console.Out);
 w.WriteStartElement("x","root","urn:1");
  w.WriteStartElement("y","item","urn:1");
  w.WriteEndElement();
 w.WriteEndElement();
 w.Close();

Si hay varias declaraciones de espacio de nombres que asignan diferentes prefijos al mismo identificador URI de espacio de nombres, XmlTextWriter recorre hacia atrás la pila de declaraciones de espacio de nombres y toma el prefijo más próximo.

 XmlTextWriter w = new XmlTextWriter(Console.Out);
 w.Formatting = Formatting.Indented;
 w.WriteStartElement("x","root","urn:1");
 w.WriteStartElement("y","item","urn:1");
 w.WriteAttributeString("attr","urn:1","123");
 w.WriteEndElement();
 w.WriteEndElement();
 w.Close();

En el anterior ejemplo de C#, como la llamada a WriteAttributeString no especifica ningún prefijo, el sistema de escritura utiliza el último prefijo insertado en la pila de espacio de nombres y genera el siguiente fragmento de XML:

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

Si se producen conflictos de espacios de nombres, XmlTextWriter los resuelve generando prefijos alternativos. Por ejemplo, si un atributo y un elemento tienen el mismo prefijo pero diferentes espacios de nombres, XmlWriter genera otro prefijo para el atributo. Los prefijos generados se denominan n{i}, donde i es un número a partir de 1. El número se restablece en 1 para cada elemento.

Los atributos asociados a un identificador URI de espacio de nombres deben tener un prefijo (los espacios de nombres predeterminados no son aplicables a los atributos). Esto satisface la sección 5.2 de la recomendación relativa a espacios de nombres en XML del Consorcio W3C. Si un atributo hace referencia a un identificador URI de espacio de nombres pero no especifica un prefijo, el sistema de escritura genera un prefijo para el atributo.

Cuando se escribe un elemento vacío, se agrega un espacio adicional entre el nombre de la etiqueta y la etiqueta de cierre; por ejemplo, <item />. De este modo, se garantiza la compatibilidad con exploradores más antiguos.

Cuando se utiliza String como parámetro de método, null y String.Empty son equivalentes. String.Empty sigue las reglas del consorcio W3C.

Para escribir datos con establecimiento inflexible de tipos, utilice la clase XmlConvert para convertir los tipos de datos en una cadena. Por ejemplo, el siguiente código C# convierte los datos de Double en String y escribe el elemento <price>19.95</price>.

 Double price = 19.95;
 writer.WriteElementString("price", XmlConvert.ToString(price));

XmlTextWriter no comprueba la conformidad de:

  • Caracteres no válidos en los nombres de atributos y elementos.

  • Caracteres Unicode que no se ajustan a la codificación especificada. Si los caracteres Unicode no se ajustan a la codificación especificada, el XmlTextWriter no los convierte en entidades de caracteres.

  • Atributos duplicados.

  • Caracteres del identificador público DOCTYPE o del identificador del sistema.

Para obtener más información sobre cómo escribir XML, vea Escribir XML con XmlWriter.

Consideraciones de seguridad

Debe tener en cuenta los elementos siguientes a la hora de trabajar con la clase XmlTextWriter.

  • Las excepciones iniciadas por XmlTextWriter pueden revelar información de ruta de acceso que quizás no desee traspasar a la aplicación. Las aplicaciones deben detectar las excepciones y procesarlas correctamente.

  • Cuando pasa XmlTextWriter a otra aplicación, la secuencia subyacente se expone a esa aplicación. Si necesita pasar XmlTextWriter a una aplicación en la que no confía del todo, debe utilizar en su lugar un objeto XmlWriter creado por el método Create.

  • XmlTextWriter no valida ningún dato que se pase a los métodos WriteDocType o WriteRaw. No debe pasar datos arbitrarios a estos métodos.

  • Si se cambia la configuración predeterminada, no hay ninguna garantía de que el resultado generado sean datos XML bien formados.

  • No acepte componentes auxiliares, como un objeto Encoding, de un origen en el que no confíe.

Jerarquía de herencia

System.Object
  System.Xml.XmlWriter
    System.Xml.XmlTextWriter
Seguridad para subprocesos

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
Plataformas

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Información de versión

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0
Vea también

Referencia

Otros recursos