如何使用 xml.etree.ElementTree 在 xml 文件上添加子项
How to add a subchild on a xml file using xml.etree.ElementTree
我正在关注 official documentation 关于如何修改现有 xml 文件以便在记录子项中添加子项值。
原始xml文件:
<Values version="2.0">
<value name="system_type">osx</value>
<record name="service">
<value name="threads">1</value>
</record>
</Values>
当前代码:
from xml.etree import ElementTree as ET
tree = ET.parse('data.xml')
values = tree.getroot()
list_languages = values.getchildren()
processing = ET.Element('value')
processing.attrib['name'] = 'cpu_use_limit'
processing.text = '20'
values.append(processing)
tree.write('output.xml')
当前输出:
<Values version="2.0">
<value name="system_type">osx</value>
<record name="service">
<value name="threads">1</value>
</record>
<value name="cpu_use_limit">20</value>
</Values>
需要xml文件:
<Values version="2.0">
<value name="system_type">osx</value>
<record name="service">
<value name="threads">1</value>
<value name="cpu_use_limit">20</value>
</record>
</Values>
我想从一个评论开始:输入 XML 似乎是错误的(语义上),因为你有一个根节点 Values,其中有 children value and record(没有似乎属于这里)。
但是,考虑到XML是正确的,那么就不要直接在Values[=下添加新创建的节点了34=] 节点,但在 record 下(这是 Values 的 child)。要找出该节点,使用 [Python 3]: findall(match, namespaces=None)。
code.py:
from xml.etree import ElementTree as ET
if __name__ == "__main__":
tree = ET.parse("data.xml")
values = tree.getroot()
list_languages = values.getchildren()
processing = ET.Element("value")
processing.attrib["name"] = "cpu_use_limit"
processing.text = "20"
relevant_nodes = values.findall("record")
for relevant_node in relevant_nodes:
relevant_node.append(processing)
tree.write("output.xml", encoding="utf-8", xml_declaration=True)
运行代码后,
output.xml:
<?xml version='1.0' encoding='utf-8'?>
<Values version="2.0">
<value name="system_type">osx</value>
<record name="service">
<value name="threads">1</value>
<value name="cpu_use_limit">20</value></record>
</Values>
我正在关注 official documentation 关于如何修改现有 xml 文件以便在记录子项中添加子项值。
原始xml文件:
<Values version="2.0">
<value name="system_type">osx</value>
<record name="service">
<value name="threads">1</value>
</record>
</Values>
当前代码:
from xml.etree import ElementTree as ET
tree = ET.parse('data.xml')
values = tree.getroot()
list_languages = values.getchildren()
processing = ET.Element('value')
processing.attrib['name'] = 'cpu_use_limit'
processing.text = '20'
values.append(processing)
tree.write('output.xml')
当前输出:
<Values version="2.0">
<value name="system_type">osx</value>
<record name="service">
<value name="threads">1</value>
</record>
<value name="cpu_use_limit">20</value>
</Values>
需要xml文件:
<Values version="2.0">
<value name="system_type">osx</value>
<record name="service">
<value name="threads">1</value>
<value name="cpu_use_limit">20</value>
</record>
</Values>
我想从一个评论开始:输入 XML 似乎是错误的(语义上),因为你有一个根节点 Values,其中有 children value and record(没有似乎属于这里)。
但是,考虑到XML是正确的,那么就不要直接在Values[=下添加新创建的节点了34=] 节点,但在 record 下(这是 Values 的 child)。要找出该节点,使用 [Python 3]: findall(match, namespaces=None)。
code.py:
from xml.etree import ElementTree as ET
if __name__ == "__main__":
tree = ET.parse("data.xml")
values = tree.getroot()
list_languages = values.getchildren()
processing = ET.Element("value")
processing.attrib["name"] = "cpu_use_limit"
processing.text = "20"
relevant_nodes = values.findall("record")
for relevant_node in relevant_nodes:
relevant_node.append(processing)
tree.write("output.xml", encoding="utf-8", xml_declaration=True)
运行代码后,
output.xml:
<?xml version='1.0' encoding='utf-8'?>
<Values version="2.0">
<value name="system_type">osx</value>
<record name="service">
<value name="threads">1</value>
<value name="cpu_use_limit">20</value></record>
</Values>