python - 在保留布局的同时更改 XML

标签 python xml elementtree

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

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

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

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

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

最佳答案

任何 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>

关于python - 在保留布局的同时更改 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1629687/

相关文章:

python 线程并行运行?

javascript - CDATA 下带有 Jquery 的 HTML 按钮

Python XML 添加元素到文件

python - 在 Python 中替换 XML 元素

python - Tkinter 中按钮的透明背景

python - 在 Python 中使用字符串提取数据框中的最后一个数字

python - SQLAlchemy 通用关系简单示例

xml - 如何在 XSLT 的帮助下转义 XML 字符?

xml - DTD 所需元素排序

python 2.7 : type object "ElementTree" has no attribute "register_namespace"