lxml._ElementTree.getpath(element) 在非默认命名空间时返回“*”而不是标签名
请帮忙让 getpath()
返回完整的标签名称,或者找个解决办法。
我正在尝试生成一个元素的 xpath,使用的是 lxml.etree._ElementTree
。这个 ElementTree
是通过解析一个大约600Kb的响应数据从某个生产环境的Web服务生成的。
print elem.getroottree().getpath(elem)
这是我得到的结果:
'/S:Envelope/S:Body/ns5:getPhysicalResponse/*[18]/*[12]/*[6]/*[2]'
很遗憾,我不能发布原始的xml,因为里面有客户的专有信息。我还尝试用自动生成的简单元素树来重现这个结果,这个树有100层嵌套,每层有100个子元素,但没有成功——getpath()
返回的 xpath 是完整的标签名称。
更新
查看了 lxml的源代码,发现它指向了 tree.h
中的 xmlGetNodePath
方法,这个方法来自 libxml2
库。所以这实际上是 libxml2
的行为。
更新 经过更多测试,我发现每当标签有非默认命名空间时,就会出现这个问题。
1 个回答
1
可以根据你的需要使用 getelementpath()
,并对命名空间进行后处理。