Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中创建用于xml.etree.ElementTree.findall()的字典时,是否有默认命名空间的键?_Python_Xml_Elementtree - Fatal编程技术网

在Python中创建用于xml.etree.ElementTree.findall()的字典时,是否有默认命名空间的键?

在Python中创建用于xml.etree.ElementTree.findall()的字典时,是否有默认命名空间的键?,python,xml,elementtree,Python,Xml,Elementtree,我试图用默认名称空间解析XML文档,即根节点具有xmlns属性。如果您想在子节点中查找某些标记,这很烦人,因为每个标记都以默认名称空间作为前缀 xml.etree.ElementTree.findall()允许传入名称空间字典,但我似乎找不到默认名称空间映射到什么。我尝试过使用“default”、“None”和“xmlns”,但没有成功 一个似乎有效的选项是在传递给findall()的标记前面加上“xmlns:”(编辑:实际上可以是任意唯一的名称)和名称空间字典中的相应条目,但我想知道这是否必要

我试图用默认名称空间解析XML文档,即根节点具有
xmlns
属性。如果您想在子节点中查找某些标记,这很烦人,因为每个标记都以默认名称空间作为前缀

xml.etree.ElementTree.findall()
允许传入
名称空间
字典,但我似乎找不到默认名称空间映射到什么。我尝试过使用“default”、“None”和“xmlns”,但没有成功

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


编辑:我应该提到这是Python3.3.2。我相信在Python的旧版本中,
findall()
不接受
名称空间
参数。

决定查看该方法的源代码。因此,事实证明,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()
的标记。如果在标记中找不到
,则标记器只返回标记,而不进行任何替换。

可能的重复。(答案似乎是“是的,必要的”)