在保留布局的同时修改XML

4 投票
2 回答
1025 浏览
提问于 2025-04-15 15:24

你会用什么方法来修改一个XML文件,同时尽量保留它的布局,比如缩进和注释?

我遇到的问题是,我有几个非常大的手动编辑的XML文件,这些文件描述了一个用户界面,现在我需要把里面的一些属性翻译成另一种语言。

我试过用Python和ElementTree来做这个,但它没有保留空格和注释。

我看到有人建议用XSLT来处理类似的问题,但我觉得在这种情况下不太适用,因为我需要对每个属性进行一些逻辑处理和查找。

如果每个元素中的属性顺序也能保留就更好了,不过我也能接受顺序改变。

2 个回答

1

如果你使用像 xt 这样的 XSLT 处理器,你可以用 Java 写扩展方法,来进行你需要的任何转换。

不过,我也成功地用过 Python 的 xml.dom.minidom 模块来做这种转换。它能保留空格和布局。

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>

撰写回答