从表格单元格中提取数据并使用Xpath忽略特定的子标记?

时间:2015-11-30 15:51:35

标签: html parsing xpath

拥有这个html表:

<table class="info">
<tbody>
    <tr><td class="name">Year</td><td>2011</td></tr>
    <tr><td class="name">Area</td><td>45 m<sup>2</sup></td></tr>     
    <tr><td class="name">Condition</td><td>Renovated</td></tr>
</tbody>
</table>

我正在尝试从每行的第二个单元格中提取数据(它是:2011年,45米,已翻新)

我使用这个Xpath表达式:

//table[@class="info"]//td[2]//text()

收到输出(错误):

2011
45 m
2
Renovated

期望的输出:

2011
45 m
Renovated

如您所见,从第2行开始,我收到了 <sup> 标记中包含的值。我想排除这个值。 我知道我可以使用这个代码(而不是我当前的Xpath代码)(最后删除了1个斜杠):

//table[@class="info"]//td[2]/text()

它会解决问题,但我需要在 <sup> 中排除此特定的 <td> 标记。因为有时我在 <td> 中有一些我不想排除的标签。

所以,我希望从每行的第二个单元格中获取数据并排除 <sup> 标记中的值

1 个答案:

答案 0 :(得分:1)

对于每个tr获取第二个td并获取/text()(单斜杠)以避免获取元素子文本。为我工作:

//table[@class="info"]//tr/td[2]/text()

打印:

2011
45 m
Renovated

或者,如果您只想排除sup元素:

//table[@class="info"]//tr/td[2]//text()[not(parent::sup)]