【发布时间】:2009-05-15 22:52:42
【问题描述】:
我需要查询一个节点以确定它是否有一个包含指定属性的父节点。例如:
<a b="value">
<b/>
</a>
从 b 作为我的焦点元素,我想执行一个 XPath 查询:
..[@b]
这将返回元素 a。返回的元素 必须 是 a 的父节点,并且不应包含任何 a 的兄弟姐妹。
lxml.etree 库声明这是一个无效的 XPath 表达式。
【问题讨论】:
我需要查询一个节点以确定它是否有一个包含指定属性的父节点。例如:
<a b="value">
<b/>
</a>
从 b 作为我的焦点元素,我想执行一个 XPath 查询:
..[@b]
这将返回元素 a。返回的元素 必须 是 a 的父节点,并且不应包含任何 a 的兄弟姐妹。
lxml.etree 库声明这是一个无效的 XPath 表达式。
【问题讨论】:
您不能将. 或.. 速记与谓词结合使用。相反,您需要使用完整的 parent:: 轴。以下内容应该适合您:
parent::*[@b]
这将选择父节点(无论其本地名称如何),如果它具有“b”属性。
【讨论】:
我不知道 lxml.etree 库,但 ..[@b] 是完全有效的 XPath(更新:参见 Ben Blank 的评论)。与parent::a[@b] 相同,它将在a 元素处返回上下文。
【讨论】: