2011-06-23 13 views
4

私は過去にHtmlAgilityPackを使って.NETでHTMLを解析しましたが、DOMモデルのみを使用しているというのは嫌いです。.NETのHTMLに相当するXmlReaderはありますか?

大きなドキュメントおよび/または重いレベルのネストでは、スタックオーバーフローまたはメモリ不足の例外が発生する可能性があります。一般に、DOMベースの解析モデルでは、ストリーミングベースのアプローチよりも大幅に多くのメモリが使用されます。これは、通常、HTMLを使用するプロセスでは、一度に利用できる要素がほんの数だけ必要となるためです。

あなたはXmlReaderクラスと同様の方法でHTMLを解析することができる.NetのためのまともなHTMLパーサーを知っていますか?順方向のみのストリーミング方式である。

+0

あなたの質問が合法的であることを超えて、Html Agility Packでスタックオーバーフローやメモリ不足の例外が発生するようなHtmlページの本当の例がありますか?私はそれがどのように見えるか興味があるだろう。 –

+0

明日あなたに試してみましょう。しかし、将来、ライブラリに 'XmlReader'スタイルのクラスを追加することを検討しますか? – RobV

+0

あまりにも多くの時間を無駄にしないで、私はちょうど興味があった:-)私は在庫のHtmlReaderを持っていますが、それは公開されていません。 –

答えて

1

問題は、HTMLが不正な形式になる可能性があることです。また、文書の大部分を解析するまで、どのタグに終了タグがないか(またはどのタグが誤った順序で配置されているか)はわかりません。

解析したドキュメントが整形式の場合は、XmlReaderを使用してください。

+1

をサポートしていないので、私はまだDOMベースの解析を使用していませんが、HTMLは唯一のフォーマットです。 - ( – RobV

5

私は通常、このためにSgmlReaderを使用します。https://github.com/MindTouch/SGMLReader

他の人が言っているように、XMLの同一ウェルに形成されたルールに従わないHTMLで問題があるので、解析する本質的に困難であるが、SgmlReader通常はかなり良い仕事をします。