• 全部
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm&WPF
  • C#开发新技术
  • 问答

取得到网页原码后如何分析其中内容,使其变成DOM树结构?

xianle_xianle 2004-11-03 04:19:47
传说用mshtml挺方便。但找了N圈也没找到合适的例子。。。

string html = "<table><tr><td>test</td></tr></table>";//这里存放着通过其它方法得到的 html 码,只是一个例子。。。

如何将这个 html 变成DOM树?

最好是给个例子,可以查找树中的任意内容。。:)
...全文
3156 点赞 收藏 36
写回复
36 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zachary7833 2004-11-24
向chestnuts(c# Sharp)学习,我C#的书就看一两本
回复
Truly 2004-11-23
偶也买了2x多本,其中wrox的1x本,大部分看了80%,总是没有坚持看完。降龙十八掌就是练不成,就差那20%
回复
onlytiancai 2004-11-19
你小子不会把wrox的书都买了吧
----
摘自C#字符串和正则表达式参考手册(Wrox)
所以说买书并不是坏事!比如就可以加分的说
当然,没有耐心读到后面的章节是不会知道这个问题的解决办法di~~~
所以大家不但要买书,而且还要读书!!像我这样,读了25本及以上的.NET和软件工程以及数学方面的书,忘的不少,但是每及一个问题出现,头脑中便会映出问题的解决方法,最差也会记起在xx书xx页,这不也是学到了东西了么?
回复
OneDotRed 2004-11-19
够强啊,俺可就差远了,.Net的书完完全全看完的也只有一两本。可能是买书买得少的原因啊。书中的内容也记不清,甭说x书y页z行啊。pfpf。

从楼上可知,学好.Net,必须要多买书,要想成为高手,至少要看25本以上.Net、软件工程、数学建模、算法等书,要想成为高手中的高手,必须要记得每本书的内容,最差也得知道在###页。

555555555555555555555555,我一生无望啊!!!!
回复
bestbear 2004-11-15
呵呵,学习
回复
progray 2004-11-12
to chestnuts(c# Sharp)
>-),买书好像不可以加分哦,哈哈

挺佩服你的,向你学习!
回复
lise221188 2004-11-10
回复
Dxh_Asp_Net 2004-11-10
string html = "<table><tr><td>test</td></tr></table>";//这里存放着通过其它方法得到
XmlDocument doc = new XmlDocument();
doc.LoadXml(html);

//前提是你这个html必须符合xml规范,举个例子,如过获得的html源码有<br>你应该替换成<br/>

回复
seekg 2004-11-09
ding
回复
chestnuts 2004-11-09
什么呀!这么长时间也没有结帖
回复
chestnuts 2004-11-08
摘自C#字符串和正则表达式参考手册(Wrox)
所以说买书并不是坏事!比如就可以加分的说
当然,没有耐心读到后面的章节是不会知道这个问题的解决办法di~~~
所以大家不但要买书,而且还要读书!!像我这样,读了25本及以上的.NET和软件工程以及数学方面的书,忘的不少,但是每及一个问题出现,头脑中便会映出问题的解决方法,最差也会记起在xx书xx页,这不也是学到了东西了么?
回复
chestnuts 2004-11-08
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Text.RegularExpressions;
using System.IO;

namespace CSharpHTMLExtractor
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class frmHTMLExtractor : System.Windows.Forms.Form
{

Int32 intMatchesMade = 0;
Regex extractHTMLRegex =
new Regex("<(?<outertag>[a-z]+[\\d]?)(?<attributes> [^>]*)*>" +
"(?<innerhtml>(<(?<innertag>[a-z]+[\\d]?)[^>]*>.*?</\\k<innertag>>|" +
"<[a-z]+[\\d]?[^>]*>|(?>[^<]*))*(?=</\\k<outertag>>))?",
RegexOptions.IgnoreCase |
RegexOptions.Compiled |
RegexOptions.ExplicitCapture |
RegexOptions.Singleline);

internal System.Windows.Forms.OpenFileDialog OpenFileDialog1;
internal System.Windows.Forms.TextBox txtInputText;
internal System.Windows.Forms.Button cmdDisplayHTML;
internal System.Windows.Forms.TreeView HTMLTreeView;
internal System.Windows.Forms.Button cmdOpenHTML;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;



public frmHTMLExtractor()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.OpenFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.txtInputText = new System.Windows.Forms.TextBox();
this.cmdDisplayHTML = new System.Windows.Forms.Button();
this.HTMLTreeView = new System.Windows.Forms.TreeView();
this.cmdOpenHTML = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// OpenFileDialog1
//
this.OpenFileDialog1.Filter = "Web Pages|*.htm;*.html;*.asp;";
this.OpenFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.OpenFileDialog1_FileOk);
//
// txtInputText
//
this.txtInputText.Font = new System.Drawing.Font("Verdana", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.txtInputText.Location = new System.Drawing.Point(32, 69);
this.txtInputText.Multiline = true;
this.txtInputText.Name = "txtInputText";
this.txtInputText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txtInputText.Size = new System.Drawing.Size(704, 243);
this.txtInputText.TabIndex = 31;
this.txtInputText.Text = "";
//
// cmdDisplayHTML
//
this.cmdDisplayHTML.Font = new System.Drawing.Font("Verdana", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.cmdDisplayHTML.Location = new System.Drawing.Point(205, 20);
this.cmdDisplayHTML.Name = "cmdDisplayHTML";
this.cmdDisplayHTML.Size = new System.Drawing.Size(161, 39);
this.cmdDisplayHTML.TabIndex = 30;
this.cmdDisplayHTML.Text = "Display HTML Tree";
this.cmdDisplayHTML.Click += new System.EventHandler(this.cmdDisplayHTML_Click);
//
// HTMLTreeView
//
this.HTMLTreeView.CausesValidation = false;
this.HTMLTreeView.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.HTMLTreeView.ImageIndex = -1;
this.HTMLTreeView.Location = new System.Drawing.Point(32, 336);
this.HTMLTreeView.Name = "HTMLTreeView";
this.HTMLTreeView.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
new System.Windows.Forms.TreeNode("HTML Document")});
this.HTMLTreeView.SelectedImageIndex = -1;
this.HTMLTreeView.Size = new System.Drawing.Size(704, 320);
this.HTMLTreeView.TabIndex = 29;
//
// cmdOpenHTML
//
this.cmdOpenHTML.Font = new System.Drawing.Font("Verdana", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.cmdOpenHTML.Location = new System.Drawing.Point(31, 20);
this.cmdOpenHTML.Name = "cmdOpenHTML";
this.cmdOpenHTML.Size = new System.Drawing.Size(161, 39);
this.cmdOpenHTML.TabIndex = 28;
this.cmdOpenHTML.Text = "Open HTML File";
this.cmdOpenHTML.Click += new System.EventHandler(this.cmdOpenHTML_Click);
//
// frmHTMLExtractor
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 15);
this.ClientSize = new System.Drawing.Size(776, 687);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.cmdDisplayHTML,
this.HTMLTreeView,
this.cmdOpenHTML,
this.txtInputText});
this.Name = "frmHTMLExtractor";
this.Text = "HTML Extractor";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new frmHTMLExtractor());
}

private void cmdOpenHTML_Click(object sender, System.EventArgs e)
{
OpenFileDialog1.ShowDialog();
}

private void cmdDisplayHTML_Click(object sender, System.EventArgs e)
{
intMatchesMade = 0;
HTMLTreeView.Nodes.Clear();
HTMLTreeView.Nodes.Add(populateTagNode(this.txtInputText.Text, "HTML Document"));
HTMLTreeView.ExpandAll();
MessageBox.Show("Completed " + intMatchesMade + " matches");
}

private void OpenFileDialog1_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
{
String filePath = OpenFileDialog1.FileName;
StreamReader streamReaderRegex = File.OpenText(filePath);
this.txtInputText.Text = streamReaderRegex.ReadToEnd();
streamReaderRegex.Close();
}

private TreeNode populateTagNode(String sInputString,
String sTitleText)
{

TreeNode htmlTagNode = new TreeNode();

try
{
MatchCollection matchesFound;

TreeNode htmlSubTagNode;
String sTag;
matchesFound = extractHTMLRegex.Matches(sInputString);

htmlTagNode.Text = sTitleText;
foreach (Match matchMade in matchesFound)
{
intMatchesMade = intMatchesMade + 1;
sTag = "<" + matchMade.Groups[1].Value +
matchMade.Groups[2].Value + ">";
htmlSubTagNode =
populateTagNode(matchMade.Groups[3].Value,
sTag);
htmlTagNode.Nodes.Add(htmlSubTagNode);
}

}
catch (ArgumentException ex)
{
MessageBox.Show("The following error occurred "
+ "\r\n" + ex.Message);
}

return htmlTagNode;
}
}
}
回复
melonlee 2004-11-05
我做的方式就是截取到html源码后,对具体需要的内容已string的方式获得,然后再添加些元素,使其成为一个xml文件,然后再作后面的工作
回复
zhouzh197895 2004-11-05
默認的情況IE中就有一個DOM树﹐只要你按照DOM树方式就可以提取或更新數據。
回复
gangster0000 2004-11-05
用dom对象的fromtext方法();
回复
bluewug 2004-11-05
幫不了你,幫你頂!
回复
xianle_xianle 2004-11-05
顶起来。。。。
回复
nocollapse 2004-11-05
电话:010-82645151 详情参见:www.f c s o f t.com.cn
什么是eform开发平台?
eform是基于浏览器的表单自定义工具,eform是页面设计工具,eform内含大量构件.不用写一行代码便能用eform开发出来常见的功能点.

使用eForm平台有如下好处:
1、用eform平台开发能降低开发人员的技术门槛,使很低水平的人就能开发一个软件项目中常见的功能.例如数据库的数据增删改查打印等等,而这部分功能往往也占居了一个软件项目的大部分.这样一个软件项目开发成员中可以有一大部分人是中专生甚至是高中生就能胜任.从而大大降低了整个软件项目的开发成本.另一方面因为低水平的开发人员很容易招聘到,这样也使软件项目更加容易完成.

2、用eform平台开发的代码一致性比较好,以后维护升级方便.因为只有个性化的功能才需要编写事件代码.所以代码量很少,大量的调用底层的代码,这样代码的集成度高.以后维护升级时修改的代码量非常少.


3、用eform平台开发能大大提高开发效率.eform平台采用对常见的功能和控件内置的方法,使得开发一些常见的功能(如数据库的增删改查,树控件,表格控件)非常容易方便.几乎不用写一行代码.直接通过控件的拖拉然后再设置属性和事件即可完成.开发程序的工作就象是打字员的工作一样.(如图所示开发效率对比示意图)

4、用eform平台开发能很好地应对软件开发项目成员的流动的问题.因为程序员的离职而造成整个项目瘫痪的事例很多.而用eform平台,因为大家都是采用同一模式开发的表单,因而一个人开发的表单很容易被另一个人看懂和使用.这样就使开发人员的流动造成的影响大大降低.企业不再受制于人.
5、用eform平台开发可以使项目不再没完没了,无法关闭.因为可以培训最终用户中的精英,让他们掌握eform平台的使用方法,这样大多需求他们便可以自己做好,而不用麻烦软件开发商了.

eform的设计思路是将数据库程序开发中常用的控制或功能点在eform平台中设计好,通过简单的设置参数或属性即可调用.而遇到很个性化的功能点则可以用传统的代码方式进行开发.因为一个数据库程序开发中大量是增,删,改,查,打印,报表,图表,数据校验等常见的功能点,而这些功能点在eform平台中都做好了,只要简单地设置一下即可完成这些功能点,而且这个设置过程也是可视化的,有相应的设置界面.这样做这些常见的功能点就非常简单快速.而少量的特别的功能点又可通过写代码的方式来完成.也就是说在一张表单中可以一部分功能是直接通过简单的设置一下来完成,另一部分功能是用代码来硬写出来的.这样就达到了常见的功能可以直接调用eform底层的api来实现以提高开发效率,但一个表单又不限定只能实现这些常见功能,你也可随意地用代码来进行无限扩充.这样就达到了既提高了开发效率又能实现很复杂的功能.
eform开发平台分为eform.j2ee和eform.net两个版本.eform.j2ee是用java编写的,面向j2ee应用.eform.net是用.net编写的,面向.net应用.实际上整个eform开发平台共有三部分的代码,① 一部分是htc js dhtml等前台的代码,② 一部分是java的代码,③ 一部分是.net的代码(c#语言的),其中java的代码完成的功能和.net的代码完成的功能完全相同.用①和②就组成了eform.j2ee版本,用① 和③ 就组成了eform.net.这样就得到了两个版本.由此可知,eform.j2ee和eform.net的接口和操作是完全相同的.只是运行环境和使用的编程语句不同罢了.这样做的好处是当需要从j2ee平台转到.net平台或是从.net平台转到j2ee的平台时,使用eform编写的表单和程序可以完全保留下来直接使用.可以轻松地跨越当今两大主流的开发平台.
使用eform开发平台开发出来的表单可以直接在浏览器中运行,不但如此,而且其设计工具也是在浏览器中运行的.也就是说,开发人员也是在IE中(拖拉控件)开发的.开发人员再也不用为了搭建开发环境而装一大堆软件了,这一点对于远程协作开发非常有利.
eform内置了常见的大量的开发构件,如树控件,表格,图表控件,打印控件,上传控件,查询等,也内置了象单表输入,一对多表输入等常见的数据库程序的功能点.通过使用这些可以大大提高开发的速度,降低开发这些常见功能的门槛,只需知道很少的知识便可以开发.使用eform生成的表单结构和格式一致,非常便于以后的维护升级.
eform开发平台开发出来的表单可以脱离eform平台单独运行,也很容易和其它程序进行集成.一个项目的程序往往是大量常用功能用eform平台开发,而少量功能用其它方式开发.然后把它们集成在一起而成的.
eform开发平台是专门为软件开发商或需要开发数据库程序的人而设计的.它采用开放版权的销售方式.对于用户开放100%的源代码,也就是说将eform开发平台的源代码全部提供给用户,同时还包括相应的开发文档和典型示例都提供给用户,而且用户用eform开发平台开发出来的程序可以自由分发.用户购买了eform后,就相当于eform是自己开发出来的一样.而且北京 方 成公司还提供一年的免费服务和技术支持.
eform的销售没有任何加密和license之说.是一种特别的销售方式.销售的过程实际上是完成知识和价值的转移的过程.相当于方成公司帮用户开发了一个平台然后再帮助用户把它使用起来,用户使用eform开发的软件可以自由销售,和方成公司没有任何关系,更不需要再收费用.由此可见,购买eform和自已招聘员工开发一个平台相比,无论是时间还是费用以及风险都是购买eform比较合算.



电话:010-82645151 详情参见:http://www.9job.info
针对各类求职者,我们将用数码摄像机将您的自我介绍、特长展示、工作实况、生活场景等拍摄下来,制成具有专业水平的短片,并配有文字说明、音乐等。充分展示您的学识、技能、才艺、素质,使您的个人简历带有强烈的个人色彩及吸引力,让您在众多求职者中脱颖而出。

优惠期间:我们将免费为您拍摄,为期一个月。
回复
xianle_xianle 2004-11-04
等了快有24小时了。。:(
回复
xianle_xianle 2004-11-04
这个问题这么难吗?
回复
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2004-11-03 04:19
社区公告

让您成为最强悍的C#开发者