Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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 lxml在存在名称空间时搜索标记_Python_Namespaces_Lxml - Fatal编程技术网

Python lxml在存在名称空间时搜索标记

Python lxml在存在名称空间时搜索标记,python,namespaces,lxml,Python,Namespaces,Lxml,对于导航一个名称空间为lxml.etree的xml文档,我有点困惑。我已经看到了一些关于这个主题(,)的帖子,也看到了一些关于这个主题的帖子,但是仍然没有找到答案 xml = """<?xml version='1.0' encoding='UTF-8' standalone='no'?> <sbml xmlns="http://www.sbml.org/sbml/level2" level="2" metaid="metaid_0000001" version="1">

对于导航一个名称空间为
lxml.etree
的xml文档,我有点困惑。我已经看到了一些关于这个主题(,)的帖子,也看到了一些关于这个主题的帖子,但是仍然没有找到答案

xml = """<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<sbml xmlns="http://www.sbml.org/sbml/level2" level="2" metaid="metaid_0000001" version="1">
    <model id="Teusink2000_Glycolysis" metaid="metaid_0000002" name="Teusink2000_Glycolysis">
        <annotation>
        </annotation>
    </model>
</sbml>"""
from lxml import etree
utf8_parser = etree.XMLParser(encoding='utf-8')
xml = etree.fromstring(xml.encode('utf-8'), parser=utf8_parser)
产生

{None: 'http://www.sbml.org/sbml/level2'}
[]
[]
[]
[]
[<Element {http://www.sbml.org/sbml/level2}model at 0x2125d7c0888>]
[<Element {http://www.sbml.org/sbml/level2}model at 0x2125d7c0448>]
[]
[]
[]
但是,如果为
模型
元素指定名称空间,则搜索该元素是可行的

print(xml.findall('model'))
print(xml.findall('model', namespaces=xml.nsmap))
print(xml.findall('model', namespaces={'': 'http://www.sbml.org/sbml/level2'}))
产生

{None: 'http://www.sbml.org/sbml/level2'}
[]
[]
[]
[]
[<Element {http://www.sbml.org/sbml/level2}model at 0x2125d7c0888>]
[<Element {http://www.sbml.org/sbml/level2}model at 0x2125d7c0448>]
[]
[]
[]
产生

{None: 'http://www.sbml.org/sbml/level2'}
[]
[]
[]
[]
[<Element {http://www.sbml.org/sbml/level2}model at 0x2125d7c0888>]
[<Element {http://www.sbml.org/sbml/level2}model at 0x2125d7c0448>]
[]
[]
[]

有人能指出我遗漏了什么吗

您的语法错误。只能使用
注释
搜索当前级别。如果要搜索整个树,需要使用
print(xml.findall('.//annotation',namespaces=xml.nsmap))

print(xml.findall('.//annotation',namespace=xml.nsmap))
# []