2012-01-01 5 views
1

私はアプリケーションからジェリコパーサーを使用して、軽量版のWebページを取得し、そこからいくつかの部分を抽出します。ですから、例えば、私はこのコードを取得する場合:JerichoパーサーがこのHTMLコードを解析できないのはなぜですか?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN/" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> </head> <body> <b> <span class="articletitletext">Happy New Year!</span></b> <br> <span class="postedstamp">Posted By <script language="JavaScript" type="text/javascript"> <!-- document.write('<a href="&#32;&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#104;&#114;&#105;&#115;&#46;&#119;&#121;&#109;&#97;&#110;&#64;&#118;&#101;&#114;&#105;&#122;&#111;&#110;&#46;&#110;&#101;&#116;">'); // --> </script>Chris</a> on January 1, 2012</span><br> <br> <span id="intelliTXT"> 

From all of us here at TheForce.net, we wish you and your family a safe and Happy New Year. May the Force be with you in 2012! 

</span></body> </html> 

私はエリコパーサーを使用して、もう一度それを解析したいのですが、私は

ArrayList<Element> centerElems=(ArrayList<Element>) pageSource.getAllElements(HTMLElementName.CENTER); 

を実行したときに、私はこの例外を得た

01-01 10:46:37.518: ERROR/AndroidRuntime(648): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.test.theforce/net.test.theforce.NewsListActivity}: java.lang.RuntimeException: java.lang.ClassCastException: java.util.Collections$EmptyList 

アプリケーションがクラッシュする...そう、軽いページで何が問題になっていますか?

+0

あなたはそれ以外の場合は、全体の多くのdiffのだが、例外を投稿する必要があります... – AHungerArtist

+0

logCatから取得したエラーメッセージで更新しました – user1012480

+0

スタックトレースを取得していませんか、貼り付けたものを正確に取得できますか? – AHungerArtist

答えて

2

ジェリコパーサーがあなたが与えたHTMLを解析できるように見えます。 getAllElements()メソッドが返すものについて間違った前提を設定したため、エラーが発生しています。

私はこのメソッドのzero-argument overloadのJavadocしか見つけられないことを認めています。使用している1引数のオーバーロードとは対照的です。したがって、両方のメソッドが同じタイプのList<Element>を返すと仮定する必要があります。あなたの例では、HTMLにcenter要素がないので、getAllElements()メソッドは空のList<Element>を返します。ここにArrayList<Element>を返す必要はありません。 List<Element>の実装はこれを行います。この場合、Collections.emptyList()を返すことを選択します。これはArrayList<Element>ではなく、ClassCastExceptionになります。これはArrayList<Element>にキャストできないためです。

  • まず、あなたがArrayList<Element>であることを返されたリストを必要としない場合があります

    私の知る限り見ることができるように、2つのオプションがあります。代わりにList<Element>を使用すれば十分でしょう。あなたが本当にArrayList<Element>するリストが必要なのですこの場合、あなたは、あなたが結果からArrayList<Element>を作成することができ、第二に

    List<Element> centerElems = pageSource.getAllElements(HTMLElementName.CENTER); 
    
  • でライン

    ArrayList<Element> centerElems=(ArrayList<Element>) pageSource.getAllElements(HTMLElementName.CENTER); 
    

    を交換する必要があります。

    ArrayList<Element> centerElems = new ArrayList<Element>(pageSource.getAllElements(HTMLElementName.CENTER)); 
    
関連する問題