繁体   English   中英

select 的父节点如何与 XPath?

[英]How select a parent node with XPath?

如果我有

<div>
  <a>
    <table>
      <tr>
        <td value="val">

如果我想 select 包含一个带有value="val"td ,我该怎么做?

我已经测试过:

//td[@value="val"]

但是我获得了td节点,我想获得a节点。 如何使用 XPath 实现这一目标?

您可以使用以下任一选项。

//td[@value="val"]/ancestor::a
^
td with value val
                   ^
                    ancestor link

或者

本例首选 xpath

//a[.//td[@value="val"]]
^
Get me any link which have td with value as val.

或者

下面的 xpath 现在可以工作,但是当页面有任何更改时,例如:如果将表格移动到 div 中,那么这个 xpath 将中断。

//td[@value="val"]/parent::tr/parent::table/parent::a

在这种情况下,我个人更喜欢至少第二个选项,因为a没有任何特定属性。 ancestor::a将 select 任何作为 td 祖先的链接。

关于如何在 XPath 中将 select 作为父级的问题的直接答案是使用parent::轴或..缩写。 但是,通常,就像您的情况一样,您可以直接通过后代上的谓词 select 目标“父级”,而不是选择后代然后必须遍历到父级。 例如, ...

此 XPath,

//a[.//td/@value = "val"]

将 select 所有a td后代且@value属性值等于"val"的元素。


更新:我没有注意,现在看到@suppurtui 已经提供了上述 XPath 作为选项。 为了我的解释所提供的任何好处,我将保留此内容,但请支持@supputuri 的回答(正如我刚刚所做的那样)。 谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM