c# html 解析器,C# html解析器 ,解析HTML的各种工具比较。

usingSystem;

usingSystem.Collections;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Net;

usingSystem.Web;

usingSystem.IO;

namespaceIntrospectionHtml

{

publicpartialclassForm1 : Form

{

publicclassTreeNodeHtmlElm : TreeNode

{

//属性节点

publicenumTypeNode

{

Html,

Form,

Link,

Image,

Css

};

publicHtmlElement mHtmlElement;

privateTypeNode type;

publicTypeNode Type

{

get{returntype; }

set{ type = value; }

}

publicTreeNodeHtmlElm(stringelm,TypeNode t)

: base()

{

type = t;

Text = elm;

mHtmlElement = null;

}

publicTreeNodeHtmlElm(HtmlElement elm,stringtxt,TypeNode t)

: base()

{

type = t;

Text = txt;

mHtmlElement = elm;

}

publicTreeNodeHtmlElm(HtmlElement elm,TypeNode t) :base()

{

type = t;

mHtmlElement = elm;

try

{

if(elm.OuterText ==null|| elm.OuterText =="")

{

Text = elm.OuterHtml;

}

else

{

if(elm.OuterText.Length > 100)

{

Text = elm.OuterText.Substring(0, 100);

}

else

{

Text = elm.OuterText;

}

}

}

catch(Exception e)

{

Text = "";

}

}

};

TreeNodeHtmlElm nodeCss = null;

publicForm1()

{

InitializeComponent();

webBrowser2.Navigate("about:blank");

splitContainer1.SplitterDistance = 50;

}

privatevoidFillTree(HtmlElement hElmFather, TreeNodeHtmlElm t,TreeNodeHtmlElm.TypeNode type)

{

foreach(HtmlElement hElminhElmFather.Children)

{

TreeNodeHtmlElm node = newTreeNodeHtmlElm(hElm,type);

t.Nodes.Add((TreeNode)node);

if(hElm.Children.Count > 0)

{

FillTree(hElm, node,type);

}

}

}

privatevoidFillTreeForm(HtmlDocument doc, TreeNodeHtmlElm t)

{

System.Collections.IEnumerator en = doc.Forms.GetEnumerator();

while(en.MoveNext())

{

FillTree((HtmlElement)en.Current,t,TreeNodeHtmlElm.TypeNode.Form);

}

}

privatevoidFillTreeLink(HtmlDocument doc, TreeNodeHtmlElm t)

{

List lstTemp = newList();

foreach(HtmlElement eindoc.Links)

{

stringtextToAdd = e.GetAttribute("href");

//

// On elimine les doublons

//

if(lstTemp.IndexOf(textToAdd) == -1)

{

TreeNodeHtmlElm node = newTreeNodeHtmlElm(e, e.GetAttribute("href"), TreeNodeHtmlElm.TypeNode.Link);

t.Nodes.Add((TreeNode)node);

lstTemp.Add(textToAdd);

}

}

}

privatevoidFillTreeImage(HtmlDocument doc, TreeNodeHtmlElm t)

{

List lstTemp = newList();

foreach(HtmlElement eindoc.Images)

{

stringtextToAdd = e.GetAttribute("src");

//

// On elimine les doublons

//

if(lstTemp.IndexOf(textToAdd) == -1 )

{

TreeNodeHtmlElm node = newTreeNodeHtmlElm(e, textToAdd,TreeNodeHtmlElm.TypeNode.Image);

t.Nodes.Add((TreeNode)node);

lstTemp.Add(textToAdd);

}

}

}

privatevoidFillTreeCss(HtmlDocument doc, TreeNodeHtmlElm t)

{

foreach(HtmlElement eindoc.All)

{

if(e.TagName.ToLower() =="link")

{

if(e.GetAttribute("rel").ToLower() =="stylesheet")

{

TreeNodeHtmlElm node = newTreeNodeHtmlElm(e, e.GetAttribute("href"),TreeNodeHtmlElm.TypeNode.Css);

t.Nodes.Add((TreeNode)node);

}

}

}

}

privatevoidShowInHtmlPreview()

{

TreeNodeHtmlElm tn = (TreeNodeHtmlElm)(treeView1.SelectedNode);

if(tn !=null)

{

try

{

webBrowser2.Document.Body.InnerHtml = "

"+ tn.mHtmlElement.InnerHtml +"";

}

catch(Exception exp)

{

}

}

}

privatevoidSaveTreeNodeHtml(stringfilename)

{

// Mettre ceci dans un objet.

TreeNodeHtmlElm tn = (TreeNodeHtmlElm)(treeView1.SelectedNode);

StreamWriter sw = newStreamWriter(saveFileDialog1.FileName);

sw.WriteLine("\n\r

\n\r");

// Ajouter le CSS dans le code html et recopier aussi le fichier.

// nodeCss

foreach(TreeNode einnodeCss.Nodes)

{

sw.WriteLine("");

}

sw.WriteLine(tn.mHtmlElement.InnerHtml);

sw.WriteLine("");

sw.Close();

sw.Dispose();

}

privatevoidbutton1_Click(objectsender, EventArgs e)

{

webBrowser1.Navigate(textBox1.Text);

webBrowser2.Navigate(textBox1.Text);

splitContainer3.Panel2Collapsed = true;

}

privatevoidtreeView1_AfterSelect(objectsender, TreeViewEventArgs e)

{

splitContainer3.Panel2Collapsed = false;

TreeNodeHtmlElm tn = (TreeNodeHtmlElm)(treeView1.SelectedNode);

propertyGrid1.SelectedObject = tn.mHtmlElement;

ShowInHtmlPreview();

}

privatevoidbuttonColapsePropertyGrid_Click(objectsender, EventArgs e)

{

splitContainer3.Panel2Collapsed = !splitContainer3.Panel2Collapsed;

}

privatevoidsaveToolStripMenuItem_Click(objectsender, EventArgs e)

{

if(treeView1.SelectedNode ==null)

{

return;

}

if(saveFileDialog1.ShowDialog() == DialogResult.OK)

{

SaveTreeNodeHtml(saveFileDialog1.FileName);

}

}

privatevoidshowInHtmlToolStripMenuItem_Click(objectsender, EventArgs e)

{

ShowInHtmlPreview();

}

privatevoidwebBrowser1_DocumentCompleted(objectsender, WebBrowserDocumentCompletedEventArgs e)

{

treeView1.Nodes.Clear();

TreeNodeHtmlElm node = newTreeNodeHtmlElm("body",TreeNodeHtmlElm.TypeNode.Html);

treeView1.Nodes.Add((TreeNode)node);

FillTree(webBrowser1.Document.Body, node,TreeNodeHtmlElm.TypeNode.Html);

TreeNodeHtmlElm nodeForm = newTreeNodeHtmlElm("forms",TreeNodeHtmlElm.TypeNode.Form);

treeView1.Nodes.Add((TreeNode)nodeForm);

FillTreeForm(webBrowser1.Document, nodeForm);

TreeNodeHtmlElm nodeLink = newTreeNodeHtmlElm("Links",TreeNodeHtmlElm.TypeNode.Link);

treeView1.Nodes.Add((TreeNode)nodeLink);

FillTreeLink(webBrowser1.Document, nodeLink);

TreeNodeHtmlElm nodeImg = newTreeNodeHtmlElm("Images",TreeNodeHtmlElm.TypeNode.Image);

treeView1.Nodes.Add((TreeNode)nodeImg);

FillTreeImage(webBrowser1.Document, nodeImg);

nodeCss = newTreeNodeHtmlElm("CSS",TreeNodeHtmlElm.TypeNode.Css);

treeView1.Nodes.Add((TreeNode)nodeCss);

FillTreeCss(webBrowser1.Document, nodeCss);

}

privatevoidtextBox1_Validated(objectsender, EventArgs e)

{

button1_Click(sender, e);

}

privatevoidcontextMenuStrip1_Opening(objectsender, CancelEventArgs e)

{

if(treeView1.SelectedNode ==null)

{

contextMenuStrip1.Enabled = false;

return;

}

contextMenuStrip1.Enabled = true;

switch(((TreeNodeHtmlElm)treeView1.SelectedNode).Type)

{

caseTreeNodeHtmlElm.TypeNode.Html:

break;

caseTreeNodeHtmlElm.TypeNode.Form:

break;

caseTreeNodeHtmlElm.TypeNode.Css:

break;

caseTreeNodeHtmlElm.TypeNode.Image:

break;

caseTreeNodeHtmlElm.TypeNode.Link:

break;

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值