如何在 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
选择哪个 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>
我有一个 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
选择哪个 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>