lxml._ElementTree.getpath(element) 在非默认命名空间时返回“*”而不是标签名

5 投票
1 回答
965 浏览
提问于 2025-04-17 19:40

请帮忙让 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(),并对命名空间进行后处理。

撰写回答