Lxml xpath的语法问题

2024-09-30 10:27:30 发布

您现在位置:Python中文网/ 问答频道 /正文

在用lxml解析Python中的XML时,我很难理解用于获取单个元素的正确语法。在

当我这样做时:

print self.root.xpath("descendant::*[@Name='GevCCP']/*",namespaces=self.nsmap)

我得到了一个从属节点的列表:

^{pr2}$

那么我如何直接使用xpath语法访问该列表的第一个子元素?

我试过:

print self.root.xpath("descendant::*[@Name='GevCCP']/ToolTip",namespaces=self.nsmap)

给了我一个空套:

[]

我还尝试在xpath中指定名称空间,这总是导致lxml.etree.XPathEvalError: Invalid expression错误。在

最后,我想对所有类型的元素执行此操作,例如:

self.root.xpath("descendant::*[@Name='GevCCP']/pValue")
self.root.xpath("descendant::*[@Name='GevCCP']/EnumEntry[@Name='Group']/Value")
self.root.xpath("descendant::*[@Name='GevHeartbeatTimeoutReg']/Address")

lxml文档似乎没有涵盖我的用例,我发现的关于xpath和名称空间的任何其他内容似乎都不完整。在


Tags: nameself名称元素列表语法空间root
1条回答
网友
1楼 · 发布于 2024-09-30 10:27:30

最好的解决方案是注册XML源代码中使用的名称空间。通常,这是通过将它赋给一个可以在表达式中使用的前缀来完成的。您的nsmap变量映射名称空间是否正确?选择一个前缀(例如g):

self.nsmap = {'g': 'http://www.genicam.org/GenApi/Version_1_0'}

然后使用前缀限定XPath选择器:

^{pr2}$

相关问题 更多 >

    热门问题