对于以下HTML:
<table>
<tbody>
<tr valign="TOP">
<td align="LEFT"><b>Licensee Name:</b></td>
<td align="LEFT">Some-last-name Some-first-name</td>
</tr>
<tr valign="TOP">
<td align="LEFT"><b>License Type:</b></td>
<td align="LEFT">Optometrist (OPT)</td>
</tr>
.
.
.
</tbody>
</table>
以下代码生成一个空的Elements集合:
Elements rows = docOptometristDetail.select("body > table ~ tr");
但是这段代码有效:
tables = docOptometristDetail.select("body > table");
Elements rows = tables.select("tr");
我期待着代字号运算符:
table ~ tr
要查找<table>
元素,请跳过<tbody>
元素并构建<tr>
元素的集合。
我是否在Jsoup的选择器语法分析器中发现了一个弱点,或者我是否试图违反某些运算符优先规则?
我尝试(body > table) ~ tr
,但会抛出SelectorParseException
。
是否有办法使用单个选择器表达式进行此选择(即获取Elements
个<tr>
元素集合)?
答案 0 :(得分:1)
在CSS中,代字号~
为general sibling combinator。
选择器table ~ tr
将尝试在tr
元素之后选择table
兄弟元素。由于table
元素和tr
元素不能成为兄弟元素,因此不会选择任何元素。
理论上,选择器table ~ tr
会选择以下tr
元素:
<table></table>
<tr></tr> <!-- These 'tr' elements are following siblings of the 'table' -->
<tr></tr> <!-- This is invalid HTML, though. -->
听起来你只需要选择后代,因此body > table tr
会起作用。