原文:wIndows phone 7 解析Html数据

在我的上一篇文章中我介绍了windows phone 7的gb2312解码,

http://www.cnblogs.com/qingci/archive/2011/11/25/2263124.html

解决了下载的Html乱码问题,这一篇,我将介绍关于windows phone 7解析html数据,以便我们获得想要的数据.

这里,我先介绍一个类库HtmlAgilityPack,(上一篇文章也是通过这个工具来解码的). 类库的dll文件我会随demo一起提供

这里,我以新浪新闻为例来解析数据

先看看网页版的新浪新闻

http://news.sina.com.cn/w/sd/2011-11-27/070023531646.shtml

然后我们看一下他的源文件,

发现新闻内容的结构是

<div class="blkContainerSblk">
<h1 id="artibodyTitle" pid="1" tid="1" did="23531646" fid="1666">title</h1>
<div class="artInfo"><span id="art_source"><a href="http://www.sina.com.cn">http://www.sina.com.cn</a></span> <span id="pub_date">pub_date</span> <span id="media_name"><a href="">media_name</a> <a href=""></a> </span></div> <!-- 正文内容 begin -->
<!-- google_ad_section_start --> <div class="blkContainerSblkCon" id="artibody"></div>
</div>

大部分还有ID属性,这更适合我们去解析了。

接下来我们开始去解析

第一: 引用HtmlAgilityPack.dll文件

第二:用WebClient或者WebRequest类来下载HTML页面然后处理成字符串。

 public  delegate void CallbackEvent(object sender, DownloadEventArgs e);
public event CallbackEvent DownloadCallbackEvent;
public void HttpWebRequestDownloadGet(string url)
{ Thread _thread = new Thread(delegate()
{
Uri _uri = new Uri(url, UriKind.RelativeOrAbsolute);
HttpWebRequest _httpWebRequest = (HttpWebRequest)WebRequest.Create(_uri);
_httpWebRequest.Method="Get"; _httpWebRequest.BeginGetResponse(new AsyncCallback(delegate(IAsyncResult result)
{
HttpWebRequest _httpWebRequestCallback = (HttpWebRequest)result.AsyncState;
HttpWebResponse _httpWebResponseCallback = (HttpWebResponse)_httpWebRequestCallback.EndGetResponse(result);
Stream _streamCallback = _httpWebResponseCallback.GetResponseStream(); StreamReader _streamReader = new StreamReader(_streamCallback,new HtmlAgilityPack.Gb2312Encoding());
string _stringCallback = _streamReader.ReadToEnd(); Deployment.Current.Dispatcher.BeginInvoke(new Action(() =>
{
if (DownloadCallbackEvent != null)
{
DownloadEventArgs _downloadEventArgs = new DownloadEventArgs();
_downloadEventArgs._DownloadStream = _streamCallback;
_downloadEventArgs._DownloadString = _stringCallback;
DownloadCallbackEvent(this, _downloadEventArgs); }
})); }), _httpWebRequest);
}) ;
_thread.Start();
}
// }

O(∩_∩)O! 我这个比较复杂, 总之我们下载了html的数据就行了。

贴一个简单的下载方式吧

WebClient webClenet=new WebClient();  

         webClenet.Encoding = new HtmlAgilityPack.Gb2312Encoding(); //加入这句设定编码  

         webClenet.DownloadStringAsync(new Uri("http://news.sina.com.cn/s/2011-11-25/120923524756.shtml", UriKind.RelativeOrAbsolute));       

         webClenet.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClenet_DownloadStringCompleted);

现在处理回调函数的 e.Result

 string _result = e._DownloadString;

            HtmlDocument _doc = new HtmlDocument(); //实例化HtmlAgilityPack.HtmlDocument对象
_doc.LoadHtml(_result); //载入HTML HtmlNode _htmlNode01 = _doc.GetElementbyId("artibodyTitle"); //新闻标题的Div
string _title = _htmlNode01.InnerText; HtmlNode _htmlNode02 = _doc.GetElementbyId("artibody"); //获取内容的div
string _content = _htmlNode02.InnerText;
// int _count= _htmlNode02.ChildNodes.Where(new Func<HtmlNode,bool>("div"));
int _divIndex = _content.IndexOf(" .blkComment"); _content= _content.Substring(0,_divIndex); #region 新浪标签
HtmlNode _htmlNodo03 = _doc.GetElementbyId("art_source");
string _www = _htmlNodo03.FirstChild.InnerText;
string _wwwInt = _htmlNodo03.FirstChild.Attributes[0].Value;
#endregion
// string _source = _htmlNodo03;
//_htmlNodo03.ChildNodes #region 发布时间
HtmlNode _htmlNodo04 = _doc.GetElementbyId("pub_date");
string _pub_date = _htmlNodo04.InnerText;
#endregion #region 来源网站信息
HtmlNode _htmlNodo05 = _doc.GetElementbyId("media_name");
string _media_name = _htmlNodo05.FirstChild.InnerText;
string _modia_source = _htmlNodo05.FirstChild.Attributes[0].Value;
#endregion Media_nameHyperlinkButton.Content = _pub_date + " " + _media_name;
Media_nameHyperlinkButton.NavigateUri = new Uri(_modia_source, UriKind.RelativeOrAbsolute);
TitleTextBlock.Text = _title;
ContentTextBlock.Text = _content;

结果如下图所示:

网页的大部分标签是没有ID属性的,不过幸运的是HtmlAgilityPack支持XPath

那就需要通过XPATH语言来查找匹配所需节点

XPath教程:http://www.w3school.com.cn/xpath/index.asp

案例下载:

http://115.com/file/dn87dl2d#
MyFramework_Test.zip

wIndows phone 7 解析Html数据的更多相关文章

  1. Delphi中使用ISuperObject解析Json数据

    Java.Php等语言中都有成熟的框架来解析Json数据,可以让我们使用很少的代码就把格式化好的json数据转换成程序可识别的对象或者属性,同时delphi中也有这样的组件来实现此功能,即Isuper ...

  2. C#如何解析JSON数据(反序列化对象)

    第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) 第四章:C#如何生成JSON字符串提交给接口 ...

  3. Qt QJson解析json数据

    Qt QJson解析json数据 //加载根目录文件 void TeslaManageData::loadRootFolderFiles() { QNetworkAccessManager *mana ...

  4. jQuey知识点三 解析json数据

    1.解析简单数据 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="vie ...

  5. Windows错误码解析

    C或者C++开发肯定经常会遇到各种错误码,由于每个错误码只是一个枚举或者一个整形数值,调试或者输出日志的时候,无法知道这个错误码的具体含义,这时候就需要将此错误码解释出来.对于自己定义的错误码,可以通 ...

  6. iOS关于XML解析请求数据

    XML数据的请求: 和json请求几乎一样,只有请求参数修改为xml即可: AFHTTPSessionManager *manager = [AFHTTPSessionManager manager] ...

  7. 使用Python解析JSON数据的基本方法

    这篇文章主要介绍了使用Python解析JSON数据的基本方法,是Python入门学习中的基础知识,需要的朋友可以参考下:     ----------------------------------- ...

  8. iOS解析XML数据

    iOS中解析XML数据的类是  NSXMLParser,详细使用方法如下: 假设现在在内存中有XML的二进制数据对象(NSData):data(该数据可能来自网络,也可能是本地的文件数据),设置NSX ...

  9. 使用jQuery解析JSON数据

    我们先以解析上例中的comments对象的JSON数据为例,然后再小结jQuery中解析JSON数据的方法. 上例中得到的JSON数据如下,是一个嵌套JSON: {"comments&quo ...

随机推荐

  1. 【Demo 0004】屏幕、窗体及视图基础知识

    本章学习要点       1.  了解iOS中应用程序(UIApplication)与屏幕.窗体以及视图相关基础知识:       2.  掌握应用程序常用的属性与方法:        3.  掌握窗 ...

  2. LeetCode——Count and Say

    The count-and-say sequence is the sequence of integers beginning as follows: 1, 11, 21, 1211, 111221 ...

  3. Swift - 使用EventKit获取系统日历事件,添加事件

    通过EventKit可以对iOS日历事件进行读取,添加等操作.但网上找到的都是使用Objective-C来编写的. 下面提供一个Swift版的样例,演示如何添加一个事件以及获取所有的事件列表. 1 2 ...

  4. TCP三次握手和Time-Wait状态

    第一次握手:建立连接时.client发送syn包和一个随机序列号seq=x到server,并进入SYN_SEND状态,等待server进行确认. (syn,同 步序列编号). 第二次握手,server ...

  5. cape town

    开普敦_百度百科 开普敦

  6. Python的对象和类型

    Python使用对象来存储数据,构造任何类型的值都是一个对象. 任何一个对象都有三个特性:身份,类型和值. 身份是对象的唯一标识,可以通过内建函数id()得到,这个值可以认为是该对象的内存地址. Py ...

  7. 14.3.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁

    14.3.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁 这个章节建立关于死锁的概念信息,它解释如何组织数据库操作来减少死锁和随后的错误处理: D ...

  8. 获取CentOS软件源中的updates包

    之前在本地网络中建了一个CentOS软件源,挺好用的,可是发现有些软件还是装不上,因为系统安装盘中的包并不全,有些软件的依赖在updates源中,updates源在网上,怎么把其中的包拿到呢?一种方法 ...

  9. 基于AdaBoost的人脸检测

    原地址:http://blog.csdn.net/celerychen2009/article/details/8839097 人脸检测和人脸识别都是属于典型的机器学习的方法,但是他们使用的方法却相差 ...

  10. 快速学会搭建SVN服务器

    原文:快速学会搭建SVN服务器 SVN是一个版本控制工具,常用于我们软件开发项目中,用来管理我们团队共同使用的代码,文档等历史版本的管理,保持代码的更新,避免混乱. 需要工具: svn安装程序:免费下 ...