xpath查找元素';外公外婆

xpath查找元素';外公外婆,xpath,Xpath,我有点难以通过Xpath获取祖父母元素。不幸的是,我的尝试没有成功 HTML <span class="fsm fwn fcg"> <a href="bla bla"> <abbr> <span class="timestampContent" id="js_19">21 mins</span> </abbr> </a> </span> 我需要获得元素作为21

我有点难以通过Xpath获取祖父母元素。不幸的是,我的尝试没有成功

HTML

<span class="fsm fwn fcg">
  <a href="bla bla">
    <abbr>
      <span class="timestampContent" id="js_19">21 mins</span>
    </abbr>
  </a>
</span>

我需要获得
元素作为
21分钟的祖父母

我尝试了以下方法:
//span[@class='timestampContent'和contains(text(),21分钟)]../..
。/../span[@class='timestampContent'和contains(text(),21分钟)]


和其他一些选项,但它没有像我预期的那样工作。

您需要将文本括在引号中,并且
/
必须位于
]
之间。

//span[@class='timestampContent' and contains(text(), '21 mins')]/../..
但是,如果将来标记发生变化,实现这一点的一种可能更可靠的方法是,不显式地提高两个级别,而是找到第一个祖父母
a
标记:

//span[@class='timestampContent' and contains(text(), '21 mins')]/ancestor::a[1]

您的第一次尝试已接近尾声,只有
/
之前的
.
缺失(以及“21分钟”前后缺失的引号,我认为这只是一个输入错误):

或者,您也可以通过另一种方式来实现,即选择具有特定条件的孙子女
span
的元素:

//*[*/span[@class='timestampContent' and contains(text(), '21 mins')]]
这里的“and”条件使元素更加具体化。您正在专门查找具有特定href('bla-bla')的元素。如果要查找特定元素,即特定子元素的父元素,可以使用祖先::命令

你可以试试

//span[@class='timestampContent'和contains(text(),'21分钟')]/../parent::a

这是指向所需的
元素
的更直接的方法,这样您就不需要添加
[1]
[@href='bla']
,就像使用
祖先时一样


当直接指向特定的
div
元素而无需指定其属性时,这可能会很有帮助。

虽然此代码可以回答问题,但提供有关此代码回答问题的原因和/或如何提高其长期价值的附加上下文。请输入答案并在其中添加解释,而不是添加注释:)
//*[*/span[@class='timestampContent' and contains(text(), '21 mins')]]
//span[@class='timestampContent' and contains(text(),'21 mins')]/ancestor::a[@href='bla bla']