有没有办法在 python ElementTree 中定义默认/无前缀的命名空间?这似乎不起作用…
ns = {"":"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("version", ns))
这也不是:
ns = {None:"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("version", ns))
确实如此,但是我必须为每个元素添加前缀:
ns = {"mvn":"http://maven.apache.org/POM/4.0.0"}
pom = xml.etree.ElementTree.parse("pom.xml")
print(pom.findall("mvn:version", ns))
在 OSX 上使用 Python 3.5。
编辑:如果答案是“否”,您仍然可以获得赏金:-)。我只想从花费大量时间使用它的人那里得到一个明确的“不”。
原文由 Robert Fraser 发布,翻译遵循 CC BY-SA 4.0 许可协议
注意:对于 Python 3.8+,请参阅 此答案。
没有直接的方法来透明地处理默认命名空间。正如您已经提到的,为空命名空间分配一个非空名称是一种常见的解决方案:
请注意
lxml.etree
不允许明确使用空命名空间。你会得到:不过,您可以通过在加载 XML 输入数据时 删除默认命名空间定义来 简化事情: