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 是兄弟姐妹,而不是直系后代。想法?
对于第二种情况(td
是 tr
的直接后代):
//tr[@class="a"]//td[@class="b"][1]
第一种情况(td
在tr
之后),不属于第二种情况:
//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>'
所以我有一些 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 是兄弟姐妹,而不是直系后代。想法?
对于第二种情况(td
是 tr
的直接后代):
//tr[@class="a"]//td[@class="b"][1]
第一种情况(td
在tr
之后),不属于第二种情况:
//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>'