11

今のところ、HTML を含む文字列から DOM を操作できることがわかった最善の方法は次のとおりです。

WebBrowser webControl = new WebBrowser();
webControl.DocumentText = html;
HtmlDocument doc = webControl.Document;

2 つの問題があります。

  1. WebBrowserオブジェクトが必要です!
  2. これは複数のスレッドでは使用できません。別のスレッド(メインスレッド以外)で動作するものが必要です。

何か案は?

4

4 に答える 4

25

GooglePlex で HTML を検索したところ、Html Agility Packが見つかりました。それがそのためかどうかはわかりません。今すぐダウンロードして試してみます。

于 2008-10-23T23:57:37.217 に答える
9

あなたが何をしようとしているかに応じて(詳細を教えていただけますか?)、HTMLが整形式であるかどうかに応じて、これを次のように変換できXmlDocumentます:

System.Xml.XmlDocument x = new System.Xml.XmlDocument();
x.LoadXml(html); // as long as html is well-formed, i.e. XHTML

WebBrowserそうすれば、インスタンスなしで簡単に操作できます。XmlDocumentスレッドに関しては、その部分の答えを知るにはの実装について十分に知りません。


ドキュメントが適切な形式でない場合は、最初にNTidy ( HTML Tidyの .NET ラッパー) を使用して形式を整えることができます。私はプロジェクトのために一度これをしなければなりませんでしたが、それはそれほど悪くはありませんでした.

于 2008-10-23T23:54:52.760 に答える
7

JasonBunting は既にこれを投稿していますが、HTML tidy の周りに .net ラッパーを使用して XmlDocument にロードすると、実際に機能します。

以前にこの.netラッパーを使用しました:

http://www.codeproject.com/KB/cs/ZetaHtmlTidy.aspx

そして、次のように実装しました:

string input = "<p>crappy html<br <img src=foo></div>";
HtmlTidy tidy = new HtmlTidy()
string output = tidy.CleanHtml(input, HtmlTidyOptions.ConvertToXhtml);
XmlDocument doc = new XmlDocument();
doc.LoadXml(output);

再投稿と見なされた場合は申し訳ありません:)

于 2008-10-28T09:55:31.107 に答える
4

これは古い質問です。現在、次のものがあります。

  • HTML Agility Pack (すでに見つけています)
  • CsQuery、.Net jQuery ポート。jQuery 開発者に最適です。
于 2013-09-25T20:19:01.427 に答える