首先,您的 HTML 是错误的。
一旦您修复了 XHTML 的格式。您可以遍历文档树。
路径
任何具有 h3 的 td 的表。
//table//td/h3
将返回
<h3>The list</h3>
对于号码
//table//tr[2]/td[1] <-- any table, the second tr element in this table, the first td in that second tr
将返回
<td>Number</td>
因此,如果我们将多个表添加到文档中,并且您想为任何表中的每个元素查找多个结果,这非常简单。假设我们有一个 XHTML 文档,其父元素内包含许多表格,例如“根”元素。
<root>
<table width="95%" cellpadding="5" cellspacing="0" border="1">
<tr>
<td colspan="4">
<h3>The list</h3>
</td>
</tr>
<tr>
<td>123</td>
<td>First Name</td>
<td>Last Name</td>
<td>Address</td>
</tr>
</table>
<table width="95%" cellpadding="5" cellspacing="0" border="1">
<tr>
<td colspan="4">
<h3>The list</h3>
</td>
</tr>
<tr>
<td>456</td>
<td>First Name</td>
<td>Last Name</td>
<td>Address</td>
</tr>
</table>
<table width="95%" cellpadding="5" cellspacing="0" border="1">
<tr>
<td colspan="4">
<h3>The list</h3>
</td>
</tr>
<tr>
<td>789</td>
<td>First Name</td>
<td>Last Name</td>
<td>Address</td>
</tr>
</table>
</root>
我们可以使用以下 XPATH 表达式提取每个表中第二行中第一个表数据的数量:
//table/tr[2]/td[1]
这会给我们的结果
<td>123</td>
-----------------------
<td>456</td>
-----------------------
<td>789</td>
现在,假设我们有几个表,但只有一个表对我们很重要,表必须有 H3 元素,其他元素对我们不重要,如果这张表有 H3 元素,我们要提取第二行第一个 td。
<root>
<table width="95%" cellpadding="5" cellspacing="0" border="1">
<tr>
<td colspan="4">
<h4>Ignore me!</h4>
</td>
</tr>
<tr>
<td>1164961564896</td>
<td>First Name</td>
<td>Last Name</td>
<td>Address</td>
</tr>
</table>
<table width="95%" cellpadding="5" cellspacing="0" border="1">
<tr>
<td colspan="4">
<h1>I'm not interesting</h1>
</td>
</tr>
<tr>
<td>456456466465</td>
<td>First Name</td>
<td>Last Name</td>
<td>Address</td>
</tr>
</table>
<table width="95%" cellpadding="5" cellspacing="0" border="1">
<tr>
<td colspan="4">
<h3>IM THE IMPORTANT TABLE!</h3>
</td>
</tr>
<tr>
<td>123456789</td>
<td>First Name</td>
<td>Last Name</td>
<td>Address</td>
</tr>
</table>
</root>
如果我们成功找到 H3 元素,我们可以通过向后遍历树来完成此操作,然后转到下一个 tr。
//table//h3/../../../tr/td[1]
将返回
<td colspan="4">
<h3>IM THE IMPORTANT TABLE!</h3>
</td>
-----------------------
<td>123456789</td>