Question

J'ai du code IronPython qui utilise XmlTextWriter qui me permet d'écrire du code comme

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

Je souhaite que mon code soit portable dans toutes les implémentations Python (CPython, IronPython et Jython). Existe-t-il un graveur XML Python en streaming que je puisse utiliser à cet effet sans avoir besoin d'utiliser d'instructions print ou de construire un arbre DOM complet avant de l'écrire dans un fichier?

Était-ce utile?

La solution

J'ai écrit un module nommé loxun dans ce but: http://pypi.python.org / pypi / loxun / . Il fonctionne avec CPython 2.5 et Jython 2.5, mais je n’ai jamais essayé avec IronPython.

Exemple d'utilisation:

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

Et le résultat:

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

Parmi les autres fonctionnalités, il détecte les balises mal allouées lors de l'écriture, utilise une API de streaming avec une faible empreinte mémoire, prend en charge le format Unicode et permet de désactiver les impressions de qualité.

Autres conseils

Je n'ai jamais utilisé l'implémentation .NET dont vous parlez, mais il semble que le plus proche que vous obteniez soit celui de Python Analyseur SAX (plus précisément, le Classe XMLGenerator - un exemple de code ici ).

J'ai écrit un outil pour faciliter la génération XML à partir de Python ( code et tutoriel )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top