Per un tale semplice struttura XML, non si può decidere di coinvolgere un full modulo XML soffiato. Considera un modello di corda per le strutture più semplici, o Jinja per qualcosa di un po 'più complesso. Jinja può gestire il looping su un elenco di dati per produrre l'xml interno del tuo elenco di documenti. Questo è un po 'più complicato con modelli di stringhe di pitone grezzi
Per un esempio di Jinja, vedere il mio answer to a similar question.
Ecco un esempio di generazione del tuo xml con modelli di stringhe.
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
uscita:
<root>
<doc>
<field1 name="foo">The value for the foo document</field1>
<field2 name="bar">The <value> for the <bar> document</field2>
</doc>
</root>
Il lato negativo dell'approccio modello è che non sarà possibile ottenere la fuga di <
e >
gratuitamente. Ho ballato intorno a questo problema inserendo un util da xml.sax
fonte
2017-11-02 00:12:46
Ricevo 'import xml.etree.cElementTree come ET', 'ImportError: nessun modulo chiamato etree.cElementTree' - python standard OSX 10.8, ma funziona in qualche modo quando lo eseguo dall'interno di ipython. – guaka
@Kasper: Non ho un Mac, quindi non posso provare a duplicare il problema. Dimmi la versione di Python e vedrò se riesco a replicarla su Linux. – ssokolow
@ssokolow, ora sono su OSX 10.9 e questo è stato in qualche modo risolto, non ricordo se fosse la mia stessa azione o se avessi fatto qualcosa per risolverlo. – guaka