gpt4 book ai didi

Python:忽略 xml.etree.ElementTree 中的 namespace ?

转载 作者:数据小太阳 更新时间:2023-10-29 01:59:23 38 4
gpt4 key购买 nike

如何告诉 ElementTree 忽略 XML 文件中的命名空间?

例如,我更愿意查询 modelVersion(如语句 1 中所示)而不是 {http://maven.apache.org/POM/4.0.0}modelVersion(如语句 2 中所示)。

pom="""
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
</project>
"""

from xml.etree import ElementTree
ElementTree.register_namespace("","http://maven.apache.org/POM/4.0.0")
root = ElementTree.fromstring(pom)

print 1,root.findall('modelVersion')
print 2,root.findall('{http://maven.apache.org/POM/4.0.0}modelVersion')

1 []
2 [<Element '{http://maven.apache.org/POM/4.0.0}modelVersion' at 0x1006bff10>]

最佳答案

似乎没有直接的途径,因此我只是简单地包装查找调用,例如

from xml.etree import ElementTree as ET

POM = """
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
</project>
"""

NSPS = {'foo' : "http://maven.apache.org/POM/4.0.0"}

# sic!
def findall(node, tag):
return node.findall('foo:' + tag, NSPS)

root = ET.fromstring(POM)
print(map(ET.tostring, findall(root, 'modelVersion')))

输出:

['<ns0:modelVersion xmlns:ns0="http://maven.apache.org/POM/4.0.0">4.0.0</ns0:modelVersion>\n']

关于Python:忽略 xml.etree.ElementTree 中的 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34082582/

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