在C#中获取HTML SELECT长度属性

时间:2012-09-02 15:57:51

标签: c# html dom

我正在试图弄清楚如何从网页中获取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();
}

如果我在最后两行中的任何一行设置断点然后检查allElements集合,我就能找到SELECT元素。它正确地将ID显示为chap_select,并且length属性显示13正在传递的特定文档。出于某种原因,放入textBox2字段的长度是2,但是。

有关我在这里做错了什么的建议吗?我花了几个小时试图解决这个问题,但是却找不到任何试图获取SELECT属性的代码示例。

1 个答案:

答案 0 :(得分:2)

我建议您不要使用IHTMLDocument2mshtml.HTMLDocument,而是更容易使用HTML Agility Pack

  

什么是Html Agility Pack(HAP)?

     

这是一个敏捷的HTML解析器,它构建一个读/写DOM并支持普通的XPATH或XSLT(你实际上不需要理解XPATH或XSLT来使用它,不用担心......)。它是一个.NET代码库,允许您解析“out of the web”HTML文件。解析器非常容忍“真实世界”格式错误的HTML。对象模型与提出System.Xml非常相似,但对于HTML文档(或流)。

像(未经测试)的东西:

var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
textBox2.Text = doc.DocumentNode
            .SelectNodes("//select[@id='chap_select']/option").Count().ToString();