2009-10-27 5 views
4

Que feriez-vous pour modifier un fichier XML tout en préservant le plus possible la mise en page, y compris l'indentation et les commentaires? Mon problème est que j'ai quelques gros fichiers XML édités à la main décrivant une interface utilisateur, et maintenant j'ai besoin de traduire plusieurs attributs dans une autre langue.Modifier le XML tout en préservant la mise en page

J'ai essayé de le faire en utilisant Python + ElementTree, mais il n'a pas conservé ni les espaces ni les commentaires. J'ai vu XSLT suggéré pour des questions similaires, mais je ne pense pas que ce soit une alternative dans ce cas, car j'ai besoin de faire de la logique et des recherches pour chaque attribut.

Il serait préférable que l'ordre des attributs dans chaque élément soit également préservé, mais je peux tolérer un changement d'ordre.

Répondre

2

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

Si vous utilisez un processeur XSLT tel que xt, vous pouvez écrire des méthodes d'extension en Java pouvant effectuer toute transformation arbitraire dont vous avez besoin. Cela dit, j'ai utilisé avec succès le module xml.dom.minidom de Python pour ce type de transformation. Cela préserve les espaces et la disposition.

Questions connexes