我正在试图弄清楚如何从网页中获取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属性的代码示例。
答案 0 :(得分:2)
我建议您不要使用IHTMLDocument2
和mshtml.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();