gpt4 book ai didi

python - 使用 ElementTree 提取子 XML,忽略命名空间

转载 作者:行者123 更新时间:2023-12-01 02:03:59 24 4
gpt4 key购买 nike

我有以下 XML,如果名称与“Adam”匹​​配,我想提取 child 的一部分

<data>
<a:config version="1.0" xmlns:a="uri:abc.com/a" xmlns:b="uri:abc.com/b">
<a:xxx config="ABC">
<set>option_on</set>
<location>/123/123</location>
<data>123</data>
</a:xxx>
<a:xxx name="Adam">
<a:yyy value="5555-5555">
<log>true</log>
</a:yyy>
</a:xxx>
<a:xxx name="Lisa">
<a:yyy value="2222-2222">
<log>false</log>
</a:yyy>
</a:xxx>
</a:config>
</data>

我设法提取该部分,但它没有输出原始 namespace ,而是显示 ns0 和 ns1。下面是我的代码

import xml.etree.ElementTree as ET
tree2 = ET.parse("mycode.xml")
root2= tree2.getroot()
for elem in tree2.iter(tag='{uri:abc.com/a}xxx'):
match = elem.get('name')
if match == "Adam":
bla = ET.dump(elem)

输出如下:-

<ns0:xxx xmlns:ns0="uri:abc.com/a" name="Adam">
<ns0:yyy value="5555-5555">
<log>true</log>
</ns0:yyy>
</ns0:xxx>

我希望得到与原始文档完全相同的内容:-

<a:xxx name="Adam">
<a:yyy value="5555-5555">
<log>true</log>
</a:yyy>
</a:xxx>

最佳答案

使用register_namespace功能。

import xml.etree.ElementTree as ET

tree2 = ET.parse("mycode.xml")
root2 = tree2.getroot()

# Register the 'a' prefix to be used when serializing
ET.register_namespace("a", "uri:abc.com/a")

for elem in tree2.iter(tag='{uri:abc.com/a}xxx'):
match = elem.get('name')
if match == "Adam":
bla = ET.dump(elem)

输出:

<a:xxx xmlns:a="uri:abc.com/a" name="Adam">
<a:yyy value="5555-5555">
<log>true</log>
</a:yyy>
</a:xxx>

这不是您要求的确切输出。您不能强制 ElementTree 省略 namespace 声明(因为这样做会导致输出格式错误)。

关于python - 使用 ElementTree 提取子 XML,忽略命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49257216/

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