0

WebページからDOM要素を取得する方法を理解しようとしています。これが私が使用している関数です:

private void processHTML(String htmlContent)
{
    IHTMLDocument2 htmlDocument = (IHTMLDocument2)new mshtml.HTMLDocument();
    htmlDocument.write(htmlContent);

    IHTMLElementCollection allElements = htmlDocument.all;

    webBrowser1.DocumentText = allElements.item("storytext").innerHTML;
    textBox2.Text = allElements.item("chap_select").length.ToString();
}

最後の2行のいずれかにブレークポイントを設定してから、allElementsコレクションを確認すると、SELECT要素を見つけることができます。IDはchap_selectとして正しく表示され、lengthプロパティは渡される特定のドキュメントの13を表示します。ただし、何らかの理由で、textBox2フィールドに入力される長さは2です。

私がここで間違っていることについて何か提案はありますか?私はこれを理解するために数時間を費やしましたが、SELECTのこのプロパティを取得しようとしている誰かのコードサンプルを見つけることができませんでした。

4

1 に答える 1

2

を使用する代わりに、IHTMLDocument2HTMLAgilityPackmshtml.HTMLDocument使用する方がはるかに簡単な方法を使用することをお勧めします。

Html Agility Pack(HAP)とは正確には何ですか?

これは、読み取り/書き込みDOMを構築し、プレーンXPATHまたはXSLTをサポートするアジャイルHTMLパーサーです(実際には、XPATHまたはXSLTを理解して使用する必要はありません。心配しないでください...)。これは、「Web外」のHTMLファイルを解析できるようにする.NETコードライブラリです。パーサーは、「現実世界」の不正な形式のHTMLに対して非常に寛容です。オブジェクトモデルは、System.Xmlを提案するものと非常に似ていますが、HTMLドキュメント(またはストリーム)用です。

(未テスト)のようなもの:

var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
textBox2.Text = doc.DocumentNode
            .SelectNodes("//select[@id='chap_select']/option").Count().ToString();
于 2012-09-02T16:12:47.017 に答える