Pregunta

Estoy usando XmlWriter junto con Xml Serialization. Soy capaz de emitir la multa XML, pero parece que se me está escapando la forma de incluir el atributo xmlns con XmlWriter.

Para escribir el inicio del documento utilizo lo siguiente:

    Writer.WriteStartDocument();
    Writer.WriteStartElement("urlset","http://www.sitemaps.org/schemas/sitemap/0.9");

Con mi XmlWriter creado, luego recorro en SitemapNodes, los he creado y los escribo en el constructor de cadenas subyacente mediante la serialización de esta manera:

    foreach (uk.co.andrewrea.SitemapNode node in List)
    {
        Serializer.Serialize(Writer, node);
    }

Como digo, esto funciona bien PERO el espacio de nombres anterior para el elemento raíz no está incluido. Cada vez que trato de escribir físicamente el atributo, xmlns, obtengo una excepción de que el sistema está reservado para el uso de XML, por lo que básicamente no puedo usarlo.

Sé cómo hacerlo con XmlTextWriter y también con la clase XmlDocument, pero necesito entender cómo lo logro con XmlWriter y mediante la serialización.

El siguiente intento también arroja la excepción sobre la reserva de ese espacio de nombres.

foreach (uk.co.andrewrea.SitemapNode node in List)
{
      XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
      ns.Add("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");

      Serializer.Serialize(Writer, node, ns);
}

Exception Details: System.ArgumentException: Prefix "xmlns" is reserved for use by XML.
¿Fue útil?

Solución

Puede agregar el espacio de nombres a los atributos de XmlSerialization, por ejemplo:

[XmlElement(
ElementName = "Members",
Namespace = "http://www.cpandl.com")]
public Employee[] Employees;

si tiene control sobre el código.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top