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))
# []