在保留布局的同时修改XML
你会用什么方法来修改一个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>