XmlTextWriter (Clase) (System.Xml)

Cambiar vista:
Sin script
XmlTextWriter (Clase)
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
C++
public ref class XmlTextWriter : public XmlWriter
J#
public class XmlTextWriter extends XmlWriter
JScript
public class XmlTextWriter extends XmlWriter
XAML
No aplicable.
Comentarios

Esta clase implementa la clase XmlWriter.

NotaNota:

En la versión Microsoft .NET Framework versión 2.0, se recomienda crear instancias de XmlWriter mediante el método System.Xml.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, referencia null (Nothing en Visual Basic) 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

Los miembros estáticos públicos (Shared en Visual Basic) 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 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

Información de versión

.NET Framework

Compatible con: 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 2.0, 1.0

XNA Framework

Compatible con: 1.0
Vea también