XPath:查找 children 和兄弟姐妹中的第一次出现

XPath: Find first occurance in children and siblings

所以我有一些 HTML 看起来像这样:

<tr class="a">
    <td>...</td>
    <td>...</td>
</tr>
<tr>
    <td>....</td>
    <td class="b">A</td>
</tr>
<tr>....</tr>
<tr class="a">
    <td class="b">B</td>
    <td>....</td>
</tr>
<tr>
    <td class="b">Not this</td>
    <td>....</td>
</tr>

我基本上想找到 td class b 的第一个实例 tr 和 [=16= 的 class ].出现的问题是它可能在 tr 的 child 中或在它之后的下一个 tr 中。

我可以得到第二种情况:

//tr[@class="a"]//td[@class="b"]

但这错过了第一种情况,因为 TD 是兄弟姐妹,而不是直系后代。想法?

对于第二种情况(tdtr 的直接后代):

//tr[@class="a"]//td[@class="b"][1] 

第一种情况(tdtr之后),不属于第二种情况:

//tr[@class="a" and not(.//td[@class="b"])]/following::td[@class="b"][1]

使用联合运算符 (|) 将两个 xpath 查询组合在一起产生预期的输出:

//tr[@class="a"]//td[@class="b"][1] | //tr[@class="a" and not(.//td[@class="b"])]/following::td[@class="b"][1]

输出:

Element='<td class="b">A</td>'
Element='<td class="b">B</td>'