gpt4 book ai didi

python - 复制输入 xml 文件并用 Python 准确写入

转载 作者:数据小太阳 更新时间:2023-10-29 02:51:31 25 4
gpt4 key购买 nike

输入xml文件:

<?xml version="1.0"?>
<res:testcases xmlns:res="urn:testcases" id="a1e4bfdb-40a2-485c-a1ac-54d220056dd5" type="MODEL">
<mode>PRESSURE_CONTROL</mode>
<category>ADULT</category>
<testcase id="1" type="UNIQUE">
<parameter id="PEEP" value="1.0">true</parameter>
<parameter id="CMV_FREQ" value="4.0">true</parameter>
<parameter id="PRESS_ABOVE_PEEP" value="0.0">true</parameter>
<parameter id="I_E_RATIO" value="0.1">false</parameter>
</testcase>
</res:testcases>

Python 代码:

import xml.etree.ElementTree as ET

tree = ET.parse('/home/AlAhAb65/Desktop/input.xml')
root = tree.getroot()

root.attrib['type'] = 'AVA'

tree.write('/home/AlAhAb65/Desktop/output1.xml')

输出xml文件:

<ns0:testcases id="a1e4bfdb-40a2-485c-a1ac-54d220056dd5" type="AVA" xmlns:ns0="urn:testcases">
<mode>PRESSURE_CONTROL</mode>
<category>ADULT</category>
<testcase id="1" type="UNIQUE">
<parameter id="PEEP" value="1.0">true</parameter>
<parameter id="CMV_FREQ" value="4.0">true</parameter>
<parameter id="PRESS_ABOVE_PEEP" value="0.0">true</parameter>
<parameter id="I_E_RATIO" value="0.1">false</parameter>
</testcase>
</ns0:testcases>

问题是当我复制和写入输出 xml 文件时,发生了 3 件意想不到的事情。它们如下所示: 1.输入xml文件的第一行被自动删除 2. 在第二行(在输入中),文本“res”被替换为“ns0”。关闭标签时也会发生同样的情况 3. 属性(输入的第二行)的顺序改变了。 但是我想写(作为输出)我作为输入获得的 xml 文件的精确副本。请在这方面帮助我。

最佳答案

W3 定义了一个 Canonical XML standard .以这种格式编写的文档可以由任何符合 C14N 的工具链忠实地往返。

lxml.etree的情况下(具有 C14N 支持的更强大的 ElementTree API 实现),这意味着您需要做两件事:

输入文件的 C14N 格式版本如下所示(由 xmlstarlet c14n 命令生成):

<res:testcases xmlns:res="urn:testcases" id="a1e4bfdb-40a2-485c-a1ac-54d220056dd5" type="MODEL">
<mode>PRESSURE_CONTROL</mode>
<category>ADULT</category>
<testcase id="1" type="UNIQUE">
<parameter id="PEEP" value="1.0">true</parameter>
<parameter id="CMV_FREQ" value="4.0">true</parameter>
<parameter id="PRESS_ABOVE_PEEP" value="0.0">true</parameter>
<parameter id="I_E_RATIO" value="0.1">false</parameter>
</testcase>
</res:testcases>

...以及您的代码的适当修改版本:

#!/usr/bin/env python

import lxml.etree

tree = lxml.etree.parse('input.xml')
root = tree.getroot()

root.attrib['type'] = 'AVA'

tree.write_c14n('output1.xml')

如果添加 XML 声明(<?xml version="1.0"?> 行), you will be noncomplaint with the C14N standard 。因此,这是您绝对不应该做的事情。如果你真的,真的想做这种错误的事情......

  • 不要。
  • 但如果你必须这样做,你会这样做:

    outfile = open('output1.xml', 'w')
    outfile.write('<?xml version="1.0"?>\n')
    tree.write_c14n(outfile)
    outfile.close()

关于python - 复制输入 xml 文件并用 Python 准确写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17884728/

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