Domanda

Ho del codice IronPython che fa uso di XmlTextWriter che mi permette di scrivere codice come

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

Vorrei rendere il mio codice portatile attraverso le implementazioni di Python (CPython, IronPython e Jython). Esiste un masterizzatore Python XML in streaming che posso utilizzare per questo senza la necessità di utilizzare le istruzioni di stampa o di costruire un intero albero DOM prima di scriverlo in un file?

È stato utile?

Soluzione

Ho scritto un modulo chiamato loxun per fare proprio questo: http://pypi.python.org / PyPI / loxun / . Funziona con CPython 2.5 e Jython 2.5, ma non l'ho mai provato con IronPython.

Esempio di utilizzo:

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

E il risultato:

<?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>

Tra le altre funzionalità, rileva i tag non allineati durante la scrittura, utilizza un'API di streaming con un ingombro di memoria ridotto, supporta Unicode e consente di disabilitare la stampa piuttosto.

Altri suggerimenti

Non ho mai usato l'implementazione .NET di cui stai parlando, ma sembra che il più vicino che otterrai sarà Python's parser SAX (in particolare, XMLGenerator class - codice di esempio qui ).

Ho scritto uno strumento per facilitare la generazione XML da Python ( code e tutorial )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top