xpath找到元素的祖父母

时间:2016-05-25 07:10:17

标签: 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>

我需要将<a href="bla bla">元素作为<span class="timestampContent" id="js_19">21 mins</span>

的祖父母

我尝试过以下内容: //span[@class='timestampContent' and contains(text(), 21 mins)]../..../..//span[@class='timestampContent' and contains(text(), 21 mins)]

以及其他一些选项,但它并没有像我预期的那样发挥作用。

4 个答案:

答案 0 :(得分:4)

你的第一次尝试是关闭的,只有/..失踪之前(并且缺少21个左右的引号,我相信这只是一个错字):

//span[@class='timestampContent' and contains(text(), '21 mins')]/../..

或者,你可以反过来做,即选择具有某些标准的大孩子span的元素:

//*[*/span[@class='timestampContent' and contains(text(), '21 mins')]]

答案 1 :(得分:2)

您需要在引号中包含文字,并且/必须位于]..之间:

//span[@class='timestampContent' and contains(text(), '21 mins')]/../..

但是,如果标记在未来发生变化,实现这一目标的可能更可靠的方法是,不要明确上升两个级别,而是找到第一个祖父母a标记:

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

答案 2 :(得分:1)

您可以尝试

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

这是直接使用所需的a元素的方法,因此不需要像使用[1]那样添加[@href='bla bla']ancestor

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

答案 3 :(得分:0)

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

这里&#34;和&#34; condition使元素更具指定性。您正在寻找具有特定href的元素(&#39; bla bla&#39;)。如果要查找特定元素(特定子元素的父元素),请使用ancestor ::命令。