Python lxml xpath()函数不能与正确的xpath查询一起使用
我试图使用lxml库评估一些XPath查询,但是,出于某种原因,它似乎不起作用。这是密码Python lxml xpath()函数不能与正确的xpath查询一起使用,python,xpath,lxml,Python,Xpath,Lxml,我试图使用lxml库评估一些XPath查询,但是,出于某种原因,它似乎不起作用。这是密码 如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu': xml=r'' 包com.samples.e978092668; 它起作用并显示匹配。我不知道我自己的代码出了什么问题,因为,在很大程度上,我遵循了网站上的官方教程 编辑1: 尝试使用名称空间 xpath=''src:unit/src:class[(后代或self::src:decl_stmt/src:decl[(src:t
如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
xml=r''
包com.samples.e978092668;
它起作用并显示匹配。我不知道我自己的代码出了什么问题,因为,在很大程度上,我遵循了网站上的官方教程
编辑1:
尝试使用名称空间
xpath=''src:unit/src:class[(后代或self::src:decl_stmt/src:decl[(src:type[src:name[text()='JsonWebToken']]和src:annotation[src:name[text()='Inject']])和(src:annotation[src:name[text()='Path']]
tree=etree.fromstring(xml)
a=tree.xpath(xpath,名称空间={
“src”:http://www.srcML.org/srcML/src"
})
打印(len(a))#返回0(匹配项)
谢谢 问题是,当您这样做时:
tree=etree.fromstring(xml)
tree
具有上下文src:unit
,因此您的xpath正在src:unit
中查找子src:unit
。(如果您打印(tree.tag)
您将看到{http://www.srcML.org/srcML/src}单位
)
尝试在src:class
处启动xpath
xpath=''src:class[(后代或self::src:decl_stmt/src:decl[(src:type[src:name[text()='JsonWebToken']]和src:annotation[src:name[text()='Inject']])和(src:annotation[src:name[text()='Path']]]']
我测试了您的xpath。它缺少要使用的名称空间。看到这个答案:您的预期输出是什么?@SiebeJongebloed添加了名称空间,但仍然不起作用。@JackFleeting如果print len(a)
返回0,则表示没有匹配项。预期输出为正值。请更新代码,在其中显示如何使用命名空间,以便我们可以帮助您。谢谢!是的,这符合你的建议。现在,我想知道是否有办法保持xpath不变,但将树上下文更改为更高的级别,以便src:unit
也可以工作。通过查看XML,我发现unit
无论如何都是最顶层的节点。但我只是好奇是否有可能为它创建一个伪根。不确定这是否有意义。@MansurGulami-这是有意义的。您可以尝试tree=etree.ElementTree(etree.fromstring(xml))
或tree=etree.parse(io.BytesIO(xml))
,但在这两种情况下,我都必须通过将/
添加到开头(/src:unit…
)来实现xpath的绝对化。