2

htmlファイルに含まれているテーブルにアクセスしたいのですが。これが私のコードです:

  import java.io.*; 
  import com.gargoylesoftware.htmlunit.html.HtmlPage;
  import com.gargoylesoftware.htmlunit.html.HtmlTable;
  import com.gargoylesoftware.htmlunit.html.*;
  import com.gargoylesoftware.htmlunit.WebClient;


  public class test {

  public static void main(String[] args) throws Exception {

    WebClient client = new WebClient();
    HtmlPage currentPage = client.getPage("http://www.mysite.com");
    client.waitForBackgroundJavaScript(10000);



final HtmlDivision div = (HtmlDivision) currentPage.getByXPath("//div[@id='table-matches-time']");

   String textSource = div.toString();
    //String textSource = currentPage.asXml();

FileWriter fstream = new FileWriter("index.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write(textSource);

out.close();

    client.closeAllWindows();

  }

 }

テーブルは次の形式です。

   <div id="table-matches-time" class="">
                    <table class=" table-main">

しかし、私はこのエラーを受け取ります:

 Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlDivision
at test.main(test.java:20)

この表を読むにはどうすればよいですか?

4

3 に答える 3

5

これは機能します(そして私にcsvファイルを返します;)):

    import java.io.*; 
    import com.gargoylesoftware.htmlunit.html.HtmlPage;
    import com.gargoylesoftware.htmlunit.html.HtmlTable;
    import com.gargoylesoftware.htmlunit.html.HtmlTableRow;
    import com.gargoylesoftware.htmlunit.html.*;
    import com.gargoylesoftware.htmlunit.WebClient;


    public class test {

    public static void main(String[] args) throws Exception {

    WebClient client = new WebClient();
    HtmlPage currentPage = client.getPage("http://www.mysite.com");
    client.waitForBackgroundJavaScript(10000);

FileWriter fstream = new FileWriter("index.txt");
BufferedWriter out = new BufferedWriter(fstream);



   for (int i=0;i<2;i++){

final HtmlTable table = (HtmlTable) currentPage.getByXPath("//table[@class=' table-main']").get(i);




   for (final HtmlTableRow row : table.getRows()) {

   for (final HtmlTableCell cell : row.getCells()) {
    out.write(cell.asText()+',');
   }
out.write('\n');
   }

   }

out.close();

    client.closeAllWindows();

   }

   }
于 2012-04-12T08:32:29.673 に答える
0

クエリが単一のdivではなくノードのリストを返しているようです。そのIDを持つアイテムが複数ありますか?

于 2012-04-11T16:55:59.797 に答える
0

コードのこの部分を置き換えます。

(HtmlDivision) currentPage.getByXPath("//div[@id='table-matches-time']");

と:

(HtmlDivision) currentPage.getFirstByXPath("//div[@id='table-matches-time']");

最初のメソッドは、要素が1つであっても、常に要素のコレクションを返します。2番目のメソッドは、要素がさらにある場合でも、常に1つの要素を返します。

編集:

同じ要素が2つあるためid(これはまったくお勧めできません)、次のように使用する必要があります。

(HtmlDivision) currentPage.getByXPath("//div[@id='table-matches-time']").get(0);

そうすれば、コレクションの最初の要素を取得できます。.get(1);あなたに2番目を取得します。

于 2012-04-11T17:24:19.387 に答える