2011-10-19 9 views
5

SAXパーサーを使用して通常のhtmlファイルを解析しようとしています。SAXパーサーでhtmlを解析する

SAXBuilder builder2 = new SAXBuilder(); 
     try { 
      Document sdoc = (Document)builder2.build(readFile); 
      NodeList nl=sdoc.getElementsByTagName("body"); 
      System.out.println("nodelist>>>>>>>>>>>"+nl.getLength()); 

     } catch (JDOMException e1) { 
      e1.printStackTrace(); 
     } 

しかし、私はこの例外を取得していますなぜ

Open quote is expected for attribute "{1}" associated with an element type "class". 

は誰も私を教えてくださいすることができ、例外を取得していますが、HTML形式の文書はよく形成され、それが適切にすべての開始タグと終了タグを持っています。

ありがとうございます。

+0

SAXでこれを行う理由は何ですか? – flash

+0

いいえ、htmlファイルから本文の内容を取得したいだけですので、私はそれを使用しました。他の解決策はありますか? – user972590

+1

SAXを使用すると、XHTMLを解析できますが、HTMLを解析できるかどうかはわかりません(少なくともほとんどのXMLパーサーではそうではありません)。 HTMLは整形式のXMLである必要はありません。 –

答えて

2

HtmlParserをご覧ください。通常、SAXはhtmlを解析するのに適したソリューションではありません。

+2

SAXは、HTMLのような大量のデータを解析するための良いオプションです。ちょうどそれをするためには非常に素晴らしいTagSoupを見てみてください! – slott

2

は、一般的に言えば、あなたはXMLパーサとHTMLを解析することはできません。

  • HTMLの要素タグは、すべてのケースで一致する必要はありません。 (例えば、<p>タグは、一致する</p>タグを必要としません)。これは、XMLパーサの端末消化を引き起こします。

  • 実世界のHTMLは、HTMLのXML互換サブセットではなく、HTML仕様に準拠していないことで有名です。あなたの入力ドキュメントがXHTMLであれば

しかし、あなたは理論的では、SAXとXMLパーサーを使用することができるはずです。 でもXHTMLスキーマに対してドキュメントを検証できるはずです。

5

Flashによると、XMLパーサーではなくHTMLパーサーが必要です。 HTMLはXMLではありません。

私が使った良いパーサーはNekoTagSoupです。 Nekoは良いオールラウンドパーサです。 TagSoupは、どんなに悪意を持っていても、何かを解析できるようにすることを特に目指しています。

+0

TagSoupについての話は、SAXをベースにしているので、雷が速く、<と>を含むすべての基本SAXチョークを解決するということです。 SAXとしてセットアップするのは簡単です。ハンドラメソッドはまったく同じものです。既に知っているSAXを超えた学習曲線はありません。 –

関連する問題