2

这里正确的 xpath 是什么?我正在尝试使用 HtmlUnit 解析一些 html,但无法获取特定表的行。我希望 xpath 通过标题元素识别表格并返回行列表。

<html> 
  <table> 
    <caption>table1</caption>  
    <tr><td>cell 1.1</td><td>cell 1.2</td></tr>  
    <tr><td>cell 2.1</td><td>cell 2.2</td></tr> 
  </table>  
  <table> 
    <caption>table2</caption>  
    <tr><td>cell 1-1</td><td>cell 1-2</td></tr>  
    <tr><td>cell 2-1</td><td>cell 2-2</td></tr> 
  </table> 
</html>

我认为应该工作的 xpath 是 "//caption['table2']/parent::table/tr" 但是在线测试器最终会返回两个表中的所有行,而不仅仅是带有目标标题的行。但是在我自己的 java 测试中使用 HtmlUnit 返回一个空列表。那行代码是:

final List<HtmlTableRow> domNodeList = (List<HtmlTableRow>) page.getByXPath("//caption['table2']/parent::table/tr");

有什么帮助吗?

4

2 回答 2

2

你不需要去标题只是为了找到表格。

//table[caption='table2']/tr
于 2013-10-23T06:36:18.987 回答
1

永远不要通过查看页面的源代码来尝试在 HtmlUnit 中使用 XPath。你应该:

  1. 获取页面
  2. 使用输出内容asXml()
  3. 基于此构建 XPath 表达式

HtmlUnit 修改页面的源代码。这不仅仅是美化它的问题,而是实际修改它。EG:添加tbody以及许多其他更改。所以我敢打赌这不是 HtmlUnit 本身的输出。

按照前面的步骤,你应该让它工作。

于 2013-10-23T20:50:40.073 回答