在保留布局的同时更改XML

时间:2009-10-27 09:40:25

标签: python xml elementtree

在保留尽可能多的布局(包括缩进和注释)的同时,您将使用什么来更改XML文件?

我的问题是我有几个大量的手工编辑的XML文件描述了用户界面,现在我需要将几个属性翻译成另一种语言。

我尝试过使用Python + ElementTree,但它既不保留空格也不保留注释。

我已经看到XSLT被建议用于类似的问题,但我不认为在这种情况下这是一个替代方案,因为我需要为每个属性做一些逻辑和查找。

最好还保留每个元素中的属性顺序,但我可以容忍更改的顺序。

2 个答案:

答案 0 :(得分:2)

任何DOM操作模块都应该满足您的需求。布局只是一个文本数据,因此它在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 :(得分:1)

如果使用诸如xt之类的XSLT处理器,那么您可以用Java编写可以执行任何所需转换的扩展方法。

话虽如此,我已成功使用Python的xml.dom.minidom模块进行此类转换。它确实保留了空白和布局。