您的位置:首页 > Web前端 > HTML

利用HTMLDocument2对HTML文本进行解析

2008-05-04 21:20 639 查看
利用HTMLDocument2对HTML文本进行解析 -|walrus 发表于 2006-8-8 18:34:00
[align=right][/align]
对html进行解析,一般是要利用WebBrowser控件,通过WebBrowser来获得Document2对象,那么有没有不用WebBrowser控件,直接将html文本构造成HTMLDocument2对象,从而利用HTMLDocument2对象来进行对html进行解析的方法呢?方法是有的,下面的方法就可以实现[C#]

/*
* 本示例通过一个html文件来生成HTMLDocuemt2对象(不使用WebBrowser控件),然后对
* 遍历该对象的DOM树。

*/

HTMLDocumentClass hc = new HTMLDocumentClass();
IHTMLDocument2 doc2 = hc;
string html="";
string filename="..//..//test.htm";
if (!File.Exists(filename))
{
Console.WriteLine("文件不存在");
return;
}

StreamReader sr1 = new StreamReader(
(System.IO.Stream)File.OpenRead(filename),System.Text.Encoding.Default);

while (sr1.Peek()>-1)
{
html=html+sr1.ReadToEnd();
}
sr1.Close();
doc2.write(html);
doc2.close();
//将HTMLDocument2接口转换成HTMLDocument3接口,因为后者可以使用IHTMLDOMNod接口。
IHTMLDocument3 HTMLDocument=(IHTMLDocument3)doc2;
IHTMLDOMNode rootDomNode=(IHTMLDOMNode)HTMLDocument.documentElement;
TreeNode root=treeView1.Nodes.Add("HTML");//treeview1是TreeView组件。
InsertDOMNodes(rootDomNode,root);

//递归方法,用预于遍历DOM树,同时生成一个树
private void InsertDOMNodes(IHTMLDOMNode parentnode,TreeNode tree_node)
{

if(parentnode.hasChildNodes())//是否有子结点
{
IHTMLDOMChildrenCollection allchild = (IHTMLDOMChildrenCollection)parentnode.childNodes;
int length = allchild.length;
for(int i=0;i<length;i++)//对每个子结点进行处理,首先取出每个子节点的属性,然后进行递归
{
IHTMLDOMNode child_node = (IHTMLDOMNode)allchild.item(i);
string m_snodeName =child_node.nodeName;
object m_onodevalue =child_node.nodeValue;
string m_snodetype =child_node.nodeType.ToString();
string m_snodevalue ="";
if ( m_onodevalue!=null)
m_snodevalue =m_onodevalue.ToString().Trim();
TreeNode tempnode=null;

if (child_node.nodeName.Equals("#text"))
{
if ((m_snodevalue!=null)&& (!m_snodevalue.Equals("")))
tempnode = tree_node.Nodes.Add(m_snodevalue);
}
else
{
tempnode = tree_node.Nodes.Add(child_node.nodeName);
InsertDOMNodes(child_node,tempnode);
}
}
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: