当前位置: 首页 > 知识库问答 >
问题:

如何使用XPath选择父节点?

濮阳繁
2023-03-14

如果我有

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

如果我想选择包含td的a,我该怎么做?

我测试过:

//td[@value="val"]

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

共有2个答案

沈鸿光
2023-03-14

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

这个XPath,

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

将选择所有属性值等于“val”的td子代元素。

更新:我没有注意到,@suppurtui已经提供了上述XPath作为选项。对于我的解释所提供的任何好处,我将保留这一点,但请更新@supputuri的答案(正如我刚才所做的那样)。谢谢

方嘉志
2023-03-14

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

//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没有任何特定的属性。祖先::a将选择td的祖先的任何链接。

 类似资料:
  • 如何获取此html片段中a的href值? 我需要根据I标记中的类获取它 我试过了,但没有结果

  • 问题内容: 我有一个xform文档 我想使用xpath和jdom从xform中选择数据元素 似乎工作正常,并选择title元素,但 不选择模型元素。我想这与名称空间有关。 问题答案: 一些东西。您 确实 应该使用JDOM 2.0.x …(最新版本2.0.5)。2.0.x版本中的XPath API远远优于JDOM 1.x中的XPath API:请参阅https://github.com/hunter

  • 问题内容: 我有一个GWT应用程序,正在尝试使用Selenium编写一些测试。 我正在使用XPath来标识测试页面上的元素。使用将无效,因为这些值是由GWT自动生成的,并且可以更改。当我意识到我可以按其标签找到按钮时,事情进展顺利,如下所示: 但是,当我开始运行多个测试时,我开始遇到问题。我意识到问题是,一旦Javascript生成的GWT应用程序的所有不同“页面”都保留在HTML中的隐藏元素中。

  • 我有一个XML文档,它包含一个非常复杂(对我来说)的结构,没有换行符。它有许多具有类似结构的元素: 我需要得到节点值的文本,这是节点成员的孩子也有孩子的名字与特定的文本(在这种情况下virtual_size)。也有可能存在几个类似的节点。我可以用[1]etc吗? 这让我知道了节点的名称,但是如何达到“值”节点呢?

  • 问题内容: 我只想自行选择一个名为.date的类 由于某种原因,我无法使它正常工作。如果有人知道我的代码出了什么问题,将不胜感激。 问题答案: 我想写这个问题的规范答案,因为上面的答案有问题。 我们的问题 该 CSS 选择器: 将选择具有 foo 类的任何元素。 您如何在XPath中做到这一点? 尽管XPath比CSS强大,但是 XPath没有CSS类选择器的本机等效项 。但是,有一个解决方案。

  • 问题内容: 我想创建一个Selenium测试,以使用AOL邮件测试我们的扩展。我设法登录到AOL并撰写了电子邮件,但是我还需要在iframe中的编辑器中选择元素。我检查了一下,即使打开了编辑器,以下测试也失败了: 我得到了错误。如何通过Xpath(或通过Selenium以任何其他方式)选择iframe的主体和其他元素? 问题答案: 在切换到之前,您无法浏览。您的xPath 将不会起作用,因为代码位