新客网WWW.XKER.COM:致力做中国最专业的网络学院!
模糊搜索
标题搜索
最新更新
新客商城
网站地图
RSS订阅
首页
新闻中心
网络学院
软件开发
站长之家
软件下载
手机学院
桌面壁纸
专题
论坛
学院:
操作系统
-
网络应用
-
服务器
-
网络安全
-
工具软件
-
办公软件
-
Web开发
-
数据库
-
网页设计
-
图形图像
-
媒体动画
-
硬件学堂
-
存储频道
-
QQ专区
您的位置:
首页
>
软件开发
>
.Net开发
>
Asp.net教程
> 正文:C#中利用Markup Service实现HTML解析为DOM Tree
C#中利用Markup Service实现HTML解析为DOM Tree
新客网
XKER.COM
2005-10-17 来源:
收藏本文
一个轻量级Parsing 实现。这个代码不会从网上下载任何资料,也不会执行任何脚本,纯属Parsing。
Parsing是通过MSHTML的Markup Service实现的。要正确使用这个代码,需要添加MSHTML引用。
由于.net中没有定义IPersistStreamInt接口,就必须自己实现,接口定义:
以下内容为程序代码:
[ComVisible(true), ComImport(), Guid("7FD52380-4E07-101B-AE2D-08002B2EC713 " ) , InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
public interface IPersistStreamInit
{
void GetClassID([In, Out] ref Guid pClassID);
[return: MarshalAs(UnmanagedType.I4)] [PreserveSig]
int IsDirty();
void Load([In, MarshalAs(UnmanagedType.Interface)] UCOMIStream pstm);
void Save([In, MarshalAs(UnmanagedType.Interface)] UCOMIStream pstm,
[In, MarshalAs(UnmanagedType.I4)] int fClearDirty);
void GetSizeMax([Out, MarshalAs(UnmanagedType.LPArray)] long pcbSize);
void InitNew();
}
以下内容为程序代码:
unsafe IHTMLDocument2 Parse(string s)
{
IHTMLDocument2 pDocument=new HTMLDocumentClass();
if(pDocument!=null)
{
IPersistStreamInit pPersist=pDocument as IPersistStreamInit ;
pPersist.InitNew();
pPersist=null;
IMarkupServices ms=pDocument as IMarkupServices ;
if(ms!=null)
{
IMarkupContainer pMC=null;
IMarkupPointer pStart,pEnd;
ms.CreateMarkupPointer(out pStart);
ms.CreateMarkupPointer(out pEnd);
StringBuilder sb=new StringBuilder(s);
IntPtr pSource=Marshal.StringToHGlobalUni(s);
ms.ParseString(ref *(ushort*)pSource.ToPointer(),0,out pMC,pStart,pEnd);
if(pMC!=null)
{
Marshal.Release(pSource);
return pMC as IHTMLDocument2;
}
Marshal.Release(pSource);
}
}
return null;
}
写代码的时候出了一点问题,IMarkupService::ParseString第一个参数是ref ushort,显然要传入HTML代码,这个ushort必须是第一个WideChar了,所以这里通过使用不安全代码来绕过编译器警告。
上一篇:
asp.net开发wap必备:更好的匹配手机设备
下一篇:
推荐几个.NET开源图表组件
【
收藏
】 【
评论
】 【
推荐
】 【
投稿
】 【
打印
】 【
关闭
】
最新相关文章
·
身份证函数 查看身份证地区信息
·
VS2008 第一次安装心得及使用
·
ASP.NET 2.0跨网页提交的三法
·
编程实例 WebGroupBox(Aspx控件)
·
asp.net mvc脚手架代码生成工具
·
用独立的DLL来存储图片(资源文件)
·
ASP.NET中多国语言的实现方法
·
实例 .net生成静态页方法总结
·
ASP.NET控件学习笔记之ViewState
·
用递归在TreeView价节点
·
经验总结 关于.NET 中的Event机制
·
.NET应用程序开发标准化(z)
·
在DataTable中查询应该注意的问题
·
LINQ 中调用存储过程自动绑定列名
·
如何用.NET技术在线生成网站LOGO
·
对于访问IIS元数据库失败的解决
发表评论
(
要记得去论坛讨论,点击注册新会员
)
匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
Asp.net Ajax 中的脚本错误: Sys未定义 的解决方
身份证号码15位升18位(C#)
asp.net ajax学习系列功能强大的UpdatePanel控件
Web Service描述语言 WSDL 详解(1)--为什么使用WS
Asp.Net Unleashed 2nd Edition 学习笔记 第三部
UpdatePanel与UrlRewrite
DataGridView 的分页处理
从资源文件里加载文件(C#)
Javascript与asp.net 实现Ajax多文件无刷新上传
关于ASP.NET调用JavaScript的实现
asp.net面试试题收集
基于ASP.NET AJAX的WebPart开发与部署
Huffman 编码简介(讲解的更好一些,有C的分析)
在VC++应用程序中读取文本数据
技巧 .NET如何访问MySQL数据库
专题教程
非主流Ps教程
磁碟机病毒专杀
AV终结者
会声会影教程
nero教程
FreeBSD使用大全
PDF阅读器
BT下载
QQ防骗术案例剖析
机器狗病毒查杀专题
搜狗拼音输入法专题
google earth专题
随机推荐
我们所要关注的是什么?
利用WebClient和WebRequest类获得网页源代码
Web Services的魅力
让DataGrid拥有单击回传事件并带回指定字段的值
针对 .NET 框架的安全编码指南
对我的网页动态生成图片方法的修改
实现网址的自动识别
浅谈 XmlReader
关于webcontrol和pagelet的一点看法
VB中如何用List进行选择
laiyiling
SqlDataReader的问题
C#首席设计师Anders Hejlsberg专访(一)
关于.NET中WinForms里面的ListBox实现数据绑定的.
ASP.NET实现用户在线检测的类源码
实用信息推荐
常用网页广告代码全集
中国电子地图
IP查询、IP签名
免费代理IP(每日更新)
免费周公解梦大全
html互转JS
FLASH休闲小游戏
flash动画
qq搞笑表情
最新电影大片
戴尔dell笔记本电脑订购
戴尔dell台式机电脑订购