gpt4 book ai didi

python - 使用 python Elementtree 格式化 xml

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:34 26 4
gpt4 key购买 nike

XML 文件:

<testcases>
<mode>PRESSURE_CONTROL</mode>
<category>ADULT</category>
<testcase id="1">
<parameter id="PEEP" value="1.000000">false</parameter>
<parameter id="CMV_FREQ" value="4.0">false</parameter>
<parameter id="PRESS_ABOVE_PEEP" value="0.0">true</parameter>
<parameter id="I_E_RATIO" value="0.100000">false</parameter>
</testcase>
</testcases>

Python代码:

import xml.etree.ElementTree as ET

tree = ET.parse('Results.xml')
root = tree.getroot()

mode = root.find('Mode').text
category = root.find('Category').text

self.tag_invalid = ET.SubElement(root, 'invalid') # For adding new tag with attributes and values
for v in self.final_result:
self.tag_testcase = ET.SubElement(self.tag_invalid, 'testcase')
self.tag_testcase.attrib['id'] = 5
self.tag_testcase.attrib['parameter'] = 'IE'
self.tag_testcase.text = 100
tree.write('/home/AlAhAb65/Desktop/test.xml')

输出:

<testcases>
<mode>PRESSURE_CONTROL</mode>
<category>ADULT</category>
<testcase id="1">
<parameter id="PEEP" value="1.000000">false</parameter>
<parameter id="CMV_FREQ" value="4.0">false</parameter>
<parameter id="PRESS_ABOVE_PEEP" value="0.0">true</parameter>
<parameter id="I_E_RATIO" value="0.100000">false</parameter>
</testcase>
<invalid><testcase id="5" parameter="I_E_RATIO">100.0</testcase></invalid></testcases> # Extra line after python code running

在 XML 文件中添加了额外的行。但问题是我无法格式化它。这意味着我不能添加 '\n'、'\t' 来维护层次结构和格式。有什么规则吗?我尝试了 tree.write()、ET.Element() 函数。但这些并没有提供预期的结果。

最佳答案

如果您希望 XML 文本文件的缩进直观地表示 XML 文档的层次结构,则需要对其进行 pretty-print 。一种方法是使用 xmllint --format:

$ xmllint --format test.xml 
<?xml version="1.0"?>
<testcases>
<mode>PRESSURE_CONTROL</mode>
<category>ADULT</category>
<testcase id="1">
<parameter id="PEEP" value="1.000000">false</parameter>
<parameter id="CMV_FREQ" value="4.0">false</parameter>
<parameter id="PRESS_ABOVE_PEEP" value="0.0">true</parameter>
<parameter id="I_E_RATIO" value="0.100000">false</parameter>
</testcase>
<invalid>
<testcase id="5" parameter="I_E_RATIO">100.0</testcase>
</invalid>
</testcases>

如果你想生成已经 pretty-print 的文本文件,尝试用不同的 XML 库重新解析它,例如 minidom:

>>> print minidom.parseString(
ET.tostring(
tree.getroot(),
'utf-8')).toprettyxml(indent=" ")

但请注意,这些解决方案中的每一个都会更改 XML 文档。严格来说,生成的文本文件等同于原始文本文件 -- 文本元素添加了额外的空格和换行符。

关于python - 使用 python Elementtree 格式化 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16282732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com