我正在尝试使用Feed导入器从HTML页面导入一些数据。背景是这样的:
<table class="tabela">
<tr valign="TOP">
<td class="formulario-legenda">Nome:</td>
<td nowrap="nowrap">
<b>Raul Fernando de Almeida Moreira Vidal</b>
</td>
</tr>
<tr valign="TOP">
<td class="formulario-legenda">Sigla:</td>
<td>
<b>RMV</b>
</td>
</tr>
<tr valign="TOP">
<td class="formulario-legenda">Código:</td>
<td>206415</td>
</tr>
<tr valign="TOP">
<td class="formulario-legenda">Estado:</td>
<td>Ativo</td>
</tr>
</table>
<table>
<tr>
<td class="topo">
<table>
<tr>
<td class="formulario-legenda">Categoria:</td>
<td>Professor Associado</td>
</tr>
<tr>
<td class="formulario-legenda">Carreira:</td>
<td>Pessoal Docente de Universidades</td>
</tr>
<tr>
<td class="formulario-legenda">Grupo profissional:</td>
<td>Docente</td>
</tr>
<tr valign="TOP">
<td class="formulario-legenda">Departamento:</td>
<td>
<a href="uni_geral.unidade_view?pv_unidade=151"
title="Departamento de Engenharia Informática">Departamento de Engenharia Informática</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
我试过这个:
/html/body/div/div/div/div/div/div/div/table/tbody/tr/td/table/tbody/tr[1]/td[2]
但没有出现。有人可以帮助我使用正确的语法来获取"Grupo Profissional"
吗?
答案 0 :(得分:0)
仅考虑您提供的HTML示例(只有两个表),您可以根据表格的位置选择所需的文本:
//table[2]//tr[3]/td[1]/text()
此将在您上面粘贴的HTML中使用。但是可能在您的实际场景中不起作用,因为您可能有其他表格,您要选择的表格没有ID而且您没有在代码中建议一些不变的文本,这可能是用于锚定表达式的上下文。 假设 XPath表达式的初始部分(div
序列)是正确的,可能可以使用:
/html/body/div/div/div/div/div/div/div/table[2]//tr[3]/td[1]/text()
但它的表达方式很脆弱,容易受到文件中任何变化的影响。
更好的替代方案是寻找您可以使用的标识符。我只能猜测,因为我不知道你的代码。在您的示例代码中,我猜测Codigo
及其后面的数字206415
可能是某个标识符。如果是,您可以使用它来锚定您的上下文。首先你选择它:
//table[.//td[text()='Código:']/following-sibling::td='206415']
上面的表达式将选择包含td
的表格,其中包含完全文本Código:
,后跟包含确切文本td
的{{1}} }。这将创建唯一上下文(考虑到该数字是唯一标识符)。 从该上下文,您现在可以选择所需的文本,该文本位于下一个表(206415
)中。这是第二个表的上下文:
following-sibling::table[1]
这应该选择您想要的文本(//table[.//td[text()='Código:']/following-sibling::td='206415']/following-sibling::table[1]
),该文本位于该表的第三行Grupo profissional:
和第一个单元格/列tr[3]
中:
td[1]