如何在 Python 中编辑 XML 文件?

How to edit an XML file in Python?

我有一个 resx 文件,它使用 XML 和一堆数据,如下所示:

<data name="key_first" xml:space="preserve">
    <value>Text 1</value>
</data>
<data name="key_second" xml:space="preserve">
    <value>Text 2</value>
</data>
<data name="key_third" xml:space="preserve">
    <value>Text 3</value>
</data>

名称值都共享一个词(例如:"key")。我想在 Python 中做的是采用此 'data' 名称值 ("key+anything that follows") 并将其添加到 'value' 文本,然后保存新文件,但我XML/Python 世界的新手,我有点迷路了。我希望它看起来像这样:

<data name="key_first" xml:space="preserve">
    <value>[key_first] Text 1</value>
</data>
<data name="key_second" xml:space="preserve">
    <value>[key_second] Text 2</value>
</data>
<data name="key_third" xml:space="preserve">
    <value>[key_third] Text 3</value>
</data>

我该怎么做?我应该使用 minidom 还是 Element Tree?

使用 ElementTree API 读取 XML 文件,然后您可以使用 find 查找要替换的单词或将其用作索引,然后从那里插入您想要的内容需要插入。请参阅以下链接:

How to update/modify an XML file in python?

https://docs.python.org/2/library/xml.etree.elementtree.html

http://luisartola.com/software/2010/easy-xml-in-python/

选择哪个 XML 解析器由您决定,但您可以通过以下方法适当地使用 xml.etree.ElementTree: the idea is to iterate over all data nodes, get the name attribute value from the .attrib dictionary, locate the value element inside and set the .text 解决此问题:

import xml.etree.ElementTree as ET

data = """<parent>
    <data name="key_first" xml:space="preserve">
        <value>Text 1</value>
    </data>
    <data name="key_second" xml:space="preserve">
        <value>Text 2</value>
    </data>
    <data name="key_third" xml:space="preserve">
        <value>Text 3</value>
    </data>
</parent>"""

tree = ET.fromstring(data)

for data in tree.findall("data"):
    name = data.attrib["name"]
    value = data.find("value")
    value.text = "[%s] %s" % (name, value.text)

print(ET.tostring(tree))

打印:

<parent>
    <data name="key_first" xml:space="preserve">
        <value>[key_first] Text 1</value>
    </data>
    <data name="key_second" xml:space="preserve">
        <value>[key_second] Text 2</value>
    </data>
    <data name="key_third" xml:space="preserve">
        <value>[key_third] Text 3</value>
    </data>
</parent>