lxml._ElementTree.getpath(element) 为非默认命名空间中的元素返回“*”而不是标签名称

vvl*_*rov 5 c++ python xpath lxml libxml2

请帮助getpath()在getpath()xpath 中返回完整的标签名称或找到解决方法

我正在尝试为lxml.etree._ElementTree. ElementTree通过解析来自某些生产 WebService 的 600Kb 响应生成。

print elem.getroottree().getpath(elem)
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果:

'/S:Envelope/S:Body/ns5:getPhysicalResponse/*[18]/*[12]/*[6]/*[2]'
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法发布原始 xml - 它包含专有的客户信息。此外,我尝试使用自动生成的具有 100 个嵌套级别的简单元素树来重现此结果,每个级别有 100 个子级,但没有运气 -getpath()返回带有完整标签名称的 xpath。

更新 查看lxml 源代码- 它指向库中的tree.h xmlGetNodePath方法libxml2。所以这实际上是libxml2行为。

更新 做更多的测试,我发现每次标签具有非默认命名空间时都会发生这种情况。

小智 1

getelementpath()根据需要使用和后处理名称空间。