Domanda

Cosa useresti per modificare un file XML preservando il più possibile il layout, inclusi rientri e commenti?

Il mio problema è che ho un paio di enormi file XML modificati a mano che descrivono un'interfaccia utente, e ora ho bisogno di tradurre diversi attributi in un'altra lingua.

Ho provato a farlo usando Python + ElementTree, ma non ha conservato né spazi bianchi né commenti.

Ho visto XSLT suggerito per domande simili, ma non penso che sia un'alternativa in questo caso, dal momento che ho bisogno di fare alcune logiche e ricerche per ogni attributo.

Sarebbe preferibile che anche l'ordine degli attributi in ciascun elemento fosse preservato, ma posso tollerare l'ordine modificato.

È stato utile?

Soluzione

Qualsiasi modulo di manipolazione DOM dovrebbe soddisfare le tue esigenze. Il layout è solo un dato di testo, quindi è rappresentato come nodi di testo in DOM:

>>> from xml.dom.minidom import parseString
>>> dom = parseString('''\
... <message>
...   <text>
...     Hello!
...   </text>
... </message>''')
>>> dom.childNodes[0].childNodes
[<DOM Text node "u'\n  '">, <DOM Element: text at 0xb765782c>, <DOM Text node "u'\n'">]
>>> text = dom.getElementsByTagName('text')[0].childNodes[0]
>>> text.data = text.data.replace(u'Hello', u'Hello world')
>>> print dom.toxml()
<?xml version="1.0" ?><message>
  <text>
    Hello world!
  </text>
</message>

Altri suggerimenti

Se usi un processore XSLT come xt , puoi scrivere l'estensione metodi in Java che possono eseguire qualsiasi trasformazione arbitraria di cui hai bisogno.

Detto questo, ho usato Python xml.dom.minidom riuscito per questo tipo di trasformazione. Conserva gli spazi bianchi e il layout.

scroll top