考虑这个HTML:
<div>
<table>
<tr>
<td>
<a class="cal-date">1</a>
<div class="checkin-time">6 AM | 8h 30m</div>
</td>
</tr>
</table>
</div>
我想在6 AM | 8h 30m
中匹配类(cal-date
)和文本内容(1
)时使用XPath 1.0返回<a class="cal-date">1</a>
。 <a>
不是父母或任何东西,所以我有点失落。
这是怎么做到的?
答案 0 :(得分:1)
XPath具有axes的概念(这是轴的复数,而不是用于砍伐树木的东西)。默认轴是child::
轴,因此如果您不指定它,您的查询将搜索上一节点的子节点。您可以使用不同的轴创建更复杂的查询。
在这种情况下,您可能想要使用following-sibling::
轴。首先像往常一样选择a
元素,然后在查询的下一个位置步骤中指定following-sibling::
轴来搜索a
节点的兄弟节点而不是其子节点:
//a[@class='cal-date' and . = '1']/following-sibling::div
如果需要,您可以使用div
查询更具体,与“普通”XPath一样,并且可以在更改轴后继续查询。例如,如果您的HTML更复杂,看起来像这样:
<a class="cal-date">1</a>
<div>A decoy div</div>
<div>
<span>Not this</span>
<span class="checkin-time">6 AM | 8h 30m</span>
<span> Not this either</span>
</div>
你可以使用像这样的XPath表达式获得checkin-time
范围:
//a[@class='cal-date' and . = '1']/following-sibling::div[2]/span[@class='checkin-time']
请注意,在选择span
元素后,在following-sibling::div
部分之后,未指定轴,因此它使用默认值child::
,因为我们正在寻找div
。
答案 1 :(得分:0)
没有必要使用following-sibling
。或者,搜索包含您正在查找的链接的表格单元格所包含的<div/>
元素。
//td[a[@class='cal-date' and . = '1']]/div