我对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)]
以及其他一些选项,但它并没有像我预期的那样发挥作用。
答案 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 ::命令。