解析html程序(C#版)——遍历各个节点(mshtml)

来源:互联网 发布:实时定量pcr数据分析 编辑:程序博客网 时间:2024/05/16 10:07

/*

在项目里引用了mshtml.dll,并且引用命名空间:using mshtml;

首先,参数html就是html文本内容(里面有markup标记和显示文本等等)

其次,getHtmlDisplayContent这个函数就是获取html里浏览器上可看到的内容,即从源码中取出显示文本。

 最后,traverseNodes是个人写的一个遍历各个节点的一个小小递归程序,没考虑效率什么的,只是想知道怎么使用IHtmlDocument2和IHtmlDocument3接口

Note:当html文档不规范时,比如在<!Document....之前还有别的标记或者符号时,加载工作受到严重影响,此时估计是解析不出来了,我开始还不知道为什么解析有些html时卡住了,原来是因为这些html文档在html标记前有\n\n\n....等。。。

*/  

private static string getHtmlDisplayContent(string html)

        {

            string cont = "";

            mshtml.HTMLDocumentClass oc = new mshtml.HTMLDocumentClass();

            mshtml.IHTMLDocument2 doc2 = oc;

            doc2.write(html);

            

            mshtml.IHTMLDocument3 HTMLDocument = (mshtml.IHTMLDocument3)doc2;

            traverseNodes(HTMLDocument.documentElement, ref cont);

                //mshtml.IHTMLTitleElement title = (mshtml.IHTMLTitleElement)doc2.title;

               /* cont += doc2.title.ToString();

            mshtml.IHTMLBodyElement body = (mshtml.IHTMLBodyElement)doc2.body;

            if (body.text!=null)

                cont += body.text.ToString();

                * */

            doc2.close();

            return cont;

        }

 

private static void traverseNodes(mshtml.IHTMLElement parentNode,ref string cont)

        {

            if (parentNode.innerText!=null)

                cont += parentNode.innerText;

            mshtml.IHTMLElementCollection nodes = (IHTMLElementCollection)parentNode.children;

            IEnumerator ienum= nodes.GetEnumerator();

            while (ienum.MoveNext())

            {

                IHTMLElement node = (IHTMLElement)ienum.Current;

                traverseNodes(node,ref cont);

            }

            

        }

原创粉丝点击