如何在Python中编辑XML文件?

时间:2016-07-18 15:22:55

标签: python xml database loops resx

我有一个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>

其中名称值共享一个单词(例如:&#34; key&#34;)。我想在Python中做的是采用这种数据&#39;名称值(&#34;键+后面的任何内容&#34;)并将其添加到&#39;值&#39;文本,然后保存新文件,但我是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?

2 个答案:

答案 0 :(得分:1)

选择哪种XML解析器取决于您,但以下是使用xml.etree.ElementTree解决此问题的方法:想法是迭代所有data个节点,获取name来自.attrib字典的属性值,找到里面的value元素并正确设置.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>

答案 1 :(得分:0)

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

How to update/modify a XML file in python?

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

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