2009-06-20 6 views
3

J'ai un code IronPython qui utilise XmlTextWriter ce qui me permet d'écrire du code commeÉcriture de XML à partir de Python: équivalent Python de .NET XmlTextWriter?

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 voudrais faire mon portable de code à travers des implémentations Python (CPython, IronPython et Jython). Existe-t-il un scripteur Python XML en streaming que je peux utiliser sans avoir besoin d'utiliser des instructions print ou pour construire un arbre DOM entier avant de l'écrire dans un fichier?

+0

Est-ce la même chose que http://stackoverflow.com/questions/1019895/serialize-python-dictionary-to-xml –

+0

@ S.Lott Non, ce n'est pas le cas. La question à laquelle vous faites référence concerne la sérialisation des structures de données Python directement en XML. Cette question concerne la création d'un formulaire XML spécifique à partir de Python. –

Répondre

3

j'ai écrit un module nommé loxun pour faire exactement cela: http://pypi.python.org/pypi/loxun/. Il fonctionne avec CPython 2.5 et Jython 2.5, mais je ne l'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 caractéristiques, il détecte les balises missalligned pendant que vous écrivez, utilise une API de diffusion en continu avec une faible empreinte mémoire, prend en charge Unicode et permet de désactiver la jolie impression.

2

Je n'ai jamais utilisé l'implémentation .NET dont vous parlez, mais il semble que le plus proche que vous obtiendrez est SAX parser de Python (plus précisément, le XMLGenerator class - un exemple de code here).

+0

Plus précisément, xml.sax.saxutils.XMLGenerator, qui fait partie du sax mais pas vraiment un analyseur. –

+0

Oui, merci d'avoir signalé cela. –

2

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

+0

"I un outil"? Qu'est-ce que ça veut dire? ;) –

+0

Problèmes d'édition :-) Merci. –

+0

Pas de problème. +1, ressemble à un bon outil, et un grand nom. –

Questions connexes