Pregunta

Tengo un código IronPython que hace uso de XmlTextWriter que me permite escribir código como

self.writer = System.Xml.XmlTextWriter(filename, None)
self.writer.Formatting = Formatting.Indented
self.writer.WriteStartElement(name)
self.writer.WriteString(str(text))
self.writer.WriteEndElement()

...

self.writer.Close()

Me gustaría que mi código sea portátil en las implementaciones de Python (CPython, IronPython y Jython). ¿Hay un escritor XML de Python en streaming que pueda usar para esto sin necesidad de usar declaraciones de impresión o construir un árbol DOM completo antes de escribirlo en el archivo?

¿Fue útil?

Solución

Escribí un módulo llamado loxun para hacer precisamente eso: http://pypi.python.org / pypi / loxun / . Se ejecuta con CPython 2.5 y Jython 2.5, pero nunca lo intenté con IronPython.

Ejemplo de uso:

with open("...", "wb") as out:
  xml = XmlWriter(out)
  xml.addNamespace("xhtml", "http://www.w3.org/1999/xhtml")
  xml.startTag("xhtml:html")
  xml.startTag("xhtml:body")
  xml.text("Hello world!")
  xml.tag("xhtml:img", {"src": "smile.png", "alt": ":-)"})
  xml.endTag()
  xml.endTag()
  xml.close()

Y el resultado:

<?xml version="1.0" encoding="utf-8"?>
<xhtml:html xlmns:xhtml="http://www.w3.org/1999/xhtml">
  <xhtml:body>
    Hello world!
    <xhtml:img alt=":-)" src="smile.png" />
  </xhtml:body>
</xhtml:html>

Entre otras características, detecta etiquetas mal alineadas mientras escribe, utiliza una API de transmisión con una pequeña huella de memoria, admite Unicode y permite desactivar la impresión bonita.

Otros consejos

Nunca he usado la implementación .NET de la que estás hablando, pero parece que lo más cerca que vas a estar es Python de analizador SAX (específicamente, el clase XMLGenerator - algún código de muestra aquí ).

Escribí una herramienta para facilitar la generación de XML desde Python ( código y tutorial )

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