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