wIndows phone 7 解析Html数据

原文: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

 

 

 

时间: 2024-10-31 15:21:22

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

qml-大神帮忙解答一下,QML中怎么解析JSON数据并让它显示,不用java,jsonlistmodel

问题描述 大神帮忙解答一下,QML中怎么解析JSON数据并让它显示,不用java,jsonlistmodel 项目需要解析JSON数据,jsonlistmodel貌似Windows里使用不了,小白求助啊

php-PHP提供了一个借口 用Java调用然后实现解析json数据展示到界面上最好能有demo

问题描述 PHP提供了一个借口 用Java调用然后实现解析json数据展示到界面上最好能有demo PHP提供了一个借口 用Java调用然后实现解析json数据展示到界面上最好能有demo 解决方案 说真的其实我也不会,你可以问高手 解决方案二: 使用了新浪云的php,直接json_encode数据库查询结果 代码如下 <?php header("Content-type: text/html; charset=utf-8"); //echo 'Hello, SAE!'; $my

SQL Server解析XML数据的方法详解_MsSql

本文实例讲述了SQL Server解析XML数据的方法.分享给大家供大家参考,具体如下: --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name="Email">dongsheng@xxyy.com</Info> <Info Name="Phone">678945546</

SQL Server解析XML数据的方法详解

本文实例讲述了SQL Server解析XML数据的方法.分享给大家供大家参考,具体如下: --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name="Email">dongsheng@xxyy.com</Info> <Info Name="Phone">678945546</

超级好用的解析JSON数据的网站

超级好用的解析JSON数据的网站 网址 http://json.parser.online.fr/beta/ 效果图 测试数据 {"city":{"id":1816670,"name":"Beijing","coord":{"lon":116.397232,"lat":39.907501},"country":"CN",&quo

Jquery解析json数据详解

 本篇文章主要是对Jquery解析json数据进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 最近被jquery折磨了一番,倒腾了一个jquery解析json的demo,本demo想实现从asp.net后台实例化dataSet或者dataTable数据集,将dataSet转换成json并返回给客户端,客户端用jquery getJson方法解析出来并显示在页面上.   首先简单介绍一下getJson方法   Jquery.getJson(url,[data],[callback]

Jquery Ajax解析XML数据简单实例

 本篇文章主要是对Jquery Ajax解析XML数据(同步及异步调用)的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 代码如下: $.ajax({                 async: true, // 默认true(异步请求)                 cache: true, // 默认true,设置为 false 将不会从浏览器缓存中加载请求信息.                 type: "POST", // 默认:GET 请求方式:[PO

jquery解析JSON数据示例代码

 作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式 这里可以找到json.js的代码,后面还需要formutil.js的代码及MD5.js    用jquery解析JSON数据的方法,作为jquery异步请求的传输对象,jquery请求后返回的结果是json对象,这里考虑的都是服务器返回JSON形式的字符串的形式,对于利用JSONObject等插件封装的JSON对象,与此亦是大同小异,这里不再做说明.  这里首先给

Android网络之数据解析----使用Google Gson解析Json数据

[正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍                                                                                                                 Json(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JS的一个子集. Json采用完全独立于语言的文本格式,这使得Jso