Modifier XML tout en préservant la mise en page
-
06-07-2019 - |
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é.
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