Question

Que feriez-vous pour modifier un fichier XML tout en préservant autant que possible la mise en page, y compris l'indentation et les commentaires?

Mon problème est que je possède plusieurs fichiers XML massifs, édités à la main, décrivant une interface utilisateur et que je dois maintenant traduire plusieurs attributs dans un autre langage.

J'ai essayé de le faire avec Python + ElementTree, mais cela ne préservait ni les espaces ni les commentaires.

J'ai vu XSLT être suggéré pour des questions similaires, mais je ne pense pas que ce soit une alternative dans ce cas, car je dois effectuer des recherches logiques et des recherches pour chaque attribut.

Il serait préférable que l'ordre d'attribut de chaque élément soit également préservé, mais que je puisse tolérer un ordre modifié.

Était-ce utile?

La solution

Tout module de manipulation DOM devrait répondre à vos besoins. La mise en page est simplement une donnée texte, elle est donc représentée sous forme de nœuds de texte dans 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>

Autres conseils

Si vous utilisez un processeur XSLT tel que xt , vous pouvez écrire une extension. méthodes en Java capables d’effectuer toute transformation arbitraire dont vous avez besoin.

Ceci étant dit, j'ai utilisé le xml.dom.minidom de Python

scroll top