Escrevendo XML a partir de Python: Python equivalente a .NET XmlTextWriter?
-
06-07-2019 - |
Pergunta
Eu tenho algum código IronPython que faz uso de XmlTextWriter que me permite escrever 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()
Eu gostaria de fazer o meu código portátil através de Python implementações (CPython, IronPython e Jython). Existe um streaming de Python escritor XML eu posso usar para isso sem a necessidade de usar tanto instruções de impressão, ou para construir uma árvore DOM inteiro antes de escrevê-lo para arquivo?
Solução
Eu escrevi um módulo chamado loxun para fazer exatamente isso: http://pypi.python.org / pypi / loxun / . Ele é executado com CPython 2,5 e Jython 2.5, mas eu nunca tentei com IronPython.
Exemplo de utilização:
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 o 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 outras características, ele detecta marcas missalligned enquanto você escreve, usa uma API de streaming com uma pequena pegada de memória, suporte a Unicode e permite a impressão muito desativar.
Outras dicas
Eu nunca usei a implementação .NET que você está falando, mas parece que o mais próximo que você vai conseguir é Python de SAX parser (especificamente, a classe XMLGenerator - um código de exemplo aqui ).