gpt4 book ai didi

python - 在 Python 中创建用于 xml.etree.ElementTree.findall() 的字典时,是否有默认 namespace 的键?

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

我正在尝试使用默认 namespace 解析 XML 文档,即根节点具有 xmlns 属性。如果您想尝试在子节点中查找某些标签,这会很烦人,因为每个标签都以默认 namespace 为前缀。

xml.etree.ElementTree.findall() 允许传入 namespaces 字典,但我似乎找不到默认命名空间映射到的内容.我尝试使用“默认”、“无”、“xmlns”但没有成功。

一个似乎有效的选项是在传递给 findall() 的标签前加上“xmlns:”(编辑:这实际上可以是任意唯一的名称)和相应的条目命名空间字典,但我想知道这是否有必要。

编辑:我应该提到这是 Python 3.3.2。我相信旧版本的 Python,findall() 不接受 namespaces 参数。

最佳答案

决定看一下该方法的源代码。事实证明,xml.etree.ElementPath 中的以下代码正在执行肮脏的工作:

def xpath_tokenizer(pattern, namespaces=None):
for token in xpath_tokenizer_re.findall(pattern):
tag = token[1]
if tag and tag[0] != "{" and ":" in tag:
try:
prefix, uri = tag.split(":", 1)
if not namespaces:
raise KeyError
yield token[0], "{%s}%s" % (namespaces[prefix], uri)
except KeyError:
raise SyntaxError("prefix %r not found in prefix map" % prefix)
else:
yield token

pattern 是传递给 findall() 的标签。如果在标签中没有找到 :,分词器会简单地返回标签而不进行任何替换。

关于python - 在 Python 中创建用于 xml.etree.ElementTree.findall() 的字典时,是否有默认 namespace 的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171311/

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