//parent::* 在 XPath 中?
//parent::* in XPath?
考虑这个简单的例子
library(xml2)
x <- read_xml("<body>
<p>Some <b>text</b>.</p>
<p>Some <b>other</b> <b>text</b>.</p>
<p>No bold here!</p>
</body>")
现在,我想找到包含字符串 other
的节点的所有父节点
为此,我 运行
> xml_find_all(x, "//b[contains(.,'other')]//parent::*")
{xml_nodeset (2)}
[1] <p>Some <b>other</b> <b>text</b>.</p>
[2] <b>other</b>
我不明白为什么我也得到 <b>other</b>
元素。在我看来只有一个父节点,也就是第一个节点。
这是一个错误吗?
改变
//b[contains(.,'other')]//parent::*
which selects descendant-or-self(你不想要 self)和 parent,到
//b[contains(.,'other')]/parent::*
其中 select 纯粹沿着 parent,从 select 离子中消除 <b>other</b>
。
或者,更好的是,使用这个 XPath:
//p[b[contains(.,'other')]]
如果您想要 select 所有具有 b
child 且 string-value 包含 "other" 子字符串的 p
元素,或者
//p[b = 'other']
如果 b
的 string-value 应该 等于 other
。另见
考虑这个简单的例子
library(xml2)
x <- read_xml("<body>
<p>Some <b>text</b>.</p>
<p>Some <b>other</b> <b>text</b>.</p>
<p>No bold here!</p>
</body>")
现在,我想找到包含字符串 other
的节点的所有父节点
为此,我 运行
> xml_find_all(x, "//b[contains(.,'other')]//parent::*")
{xml_nodeset (2)}
[1] <p>Some <b>other</b> <b>text</b>.</p>
[2] <b>other</b>
我不明白为什么我也得到 <b>other</b>
元素。在我看来只有一个父节点,也就是第一个节点。
这是一个错误吗?
改变
//b[contains(.,'other')]//parent::*
which selects descendant-or-self(你不想要 self)和 parent,到
//b[contains(.,'other')]/parent::*
其中 select 纯粹沿着 parent,从 select 离子中消除 <b>other</b>
。
或者,更好的是,使用这个 XPath:
//p[b[contains(.,'other')]]
如果您想要 select 所有具有 b
child 且 string-value 包含 "other" 子字符串的 p
元素,或者
//p[b = 'other']
如果 b
的 string-value 应该 等于 other
。另见