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 に答える