Pour une telle structure XML simple, vous voudrez peut-être pas impliquer un module XML Full Blown. Considérons un modèle de chaîne pour les structures les plus simples, ou Jinja pour quelque chose d'un peu plus complexe. Jinja peut gérer le bouclage d'une liste de données pour produire le fichier XML interne de votre liste de documents. C'est un peu plus compliqué avec des modèles de chaîne de python brut
Pour un exemple Jinja, voir mon answer to a similar question.
Voici un exemple de la génération de votre xml avec des modèles de chaîne.
import string
from xml.sax.saxutils import escape
inner_template = string.Template(' <field${id} name="${name}">${value}</field${id}>')
outer_template = string.Template("""<root>
<doc>
${document_list}
</doc>
</root>
""")
data = [
(1, 'foo', 'The value for the foo document'),
(2, 'bar', 'The <value> for the <bar> document'),
]
inner_contents = [inner_template.substitute(id=id, name=name, value=escape(value)) for (id, name, value) in data]
result = outer_template.substitute(document_list='\n'.join(inner_contents))
print result
Sortie:
<root>
<doc>
<field1 name="foo">The value for the foo document</field1>
<field2 name="bar">The <value> for the <bar> document</field2>
</doc>
</root>
Le point négatif de l'approche du modèle est que vous ne serez pas échapper à des <
et >
gratuitement. Je dansais autour de ce problème en tirant dans un util de xml.sax
Je reçois 'xml.etree.cElementTree d'importation comme ET',' ImportError: Aucun module nommé etree.cElementTree' - Python standard Mac OS X 10.8, mais en quelque sorte il fonctionne quand je le lance à l'intérieur ipython. – guaka
@Kasper: Je n'ai pas de Mac donc je ne peux pas essayer de dupliquer le problème. Dis-moi la version Python et je verrai si je peux la répliquer sur Linux. – ssokolow
@ssokolow, je suis sur OSX 10.9 maintenant et cela a en quelque sorte été résolu, je ne me souviens pas si c'était ma propre action ou si j'ai fait quelque chose pour le résoudre. – guaka