IP得到天气预报(3)———XML中CDATA的提取
2008-11-19 17:17
549 查看
上一个Session中,我们可以得到其中的部分信息了。也就是说,如果你自己看的话,就会发现雅虎的天气中,这样读取XML我们也只能得到相应的最低温度,最高温度。或者明天的,或者今天的湿度风速。这是东西都是每天早上或者某个时间段更新好了的。如果你要得到现在这个时间的温度,还有大家可能也看到了。如何能提取出数据库更新的DATA中的内容呢?仔细看XML不难得出。我们想要的就在description里面的CDATA。而XML的读取是不可以深入这个节点之内的。<Img>中,存储现在天气的图片。Fair是现在的天气状况。后面“,”之后那个3C就是现在的温度了。唯一的办法的就是吧这里面的内容当成HTML逐个的分析提取了。在仔细的看,多少还是能得到一定的规律的:)
图片URL提取:简单说下思路,首先得到description定位之后的innertext,就是所有的内容。图片的提取比较简单,因为这段HTML还算是正规的。而img中我们无非要使用SRC,这样的话就直接使用正则表达式进行过滤吧。
上面函数直接提取出的innerHTML就是图片的URL了。也就是IMG中的SRC了。接下来比较费事的就剩下分析全部的HTML如何定位并且提取“Fair,3c”这个内容了。仔细看的话,这段数据位于第二个<br>和第三个<br>之间。由于工作人员写的还算是正规,于是可以通过字符串处理的几个函数进行定位了。详细的函数说明MSDN中有非常好的说明和及其繁琐和复杂而又变态的例子,喜欢的自己琢磨去吧。(PS废话一句,那帮人真是闲的把那几个例子写的还不如别人随边说一句话呢)我就代码说话,思路已经讲的很清楚了。具体实践过城中由于个别的特殊符号的出现我们还是需要具体问题具体分析的。下面函数得出结果。返回现在的温度。我要的是那个“3c”。写得有点啰嗦,不过好懂。
总结:基本通过上面的几个步骤的提取和分析,就可以把几乎所有想要的数据提取出来了。剩下的就是前台页面的制作和美化了。
测试地址
简单加个链接目录,有兴趣的可以一起研究下:)
IP得到天气预报(1)———数据分析存储
IP得到天气预报(2)———IP运算和数据处理
IP得到天气预报(3)———XML中CDATA的提取
IP得到天气预报(4)———制作自己的RSS订阅
- <description> - <![CDATA[ <img src="http://l.yimg.com/us.yimg.com/i/us/we/52/34.gif"/><br /> <b>Current Conditions:</b><br /> Fair, 3 C<BR /> <BR /><b>Forecast:</b><BR /> Wed - Clear. High: 6 Low: -3<br /> Thu - Sunny. High: 12 Low: -3<br /> <br /> <a href="http://us.rd.yahoo.com/dailynews/rss/weather/Beijing__CH/*http://weather.yahoo.com/forecast/CHXX0008_c.html">Full Forecast at Yahoo! Weather</a><BR/> (provided by The Weather Channel)<br/> ]]> </description>
图片URL提取:简单说下思路,首先得到description定位之后的innertext,就是所有的内容。图片的提取比较简单,因为这段HTML还算是正规的。而img中我们无非要使用SRC,这样的话就直接使用正则表达式进行过滤吧。
protected string GetImgURL(string aUrlXML) { XmlDocument aDoc = new XmlDocument(); aDoc.Load(aUrlXML); XmlNodeList nodes = aDoc.GetElementsByTagName("description"); string innnerHTML = string.Empty; foreach (XmlNode node in nodes) { innnerHTML = node.InnerText.ToString(); } Regex regex = new Regex("<img .*src=(\"|')?(\\S*)(\"|')"); innnerHTML = (regex.Match(innnerHTML).ToString()).TrimStart("<img src=".ToCharArray()); innnerHTML = innnerHTML.TrimStart("<img src=".ToCharArray()).Trim("\"".ToCharArray()); return innnerHTML; }
上面函数直接提取出的innerHTML就是图片的URL了。也就是IMG中的SRC了。接下来比较费事的就剩下分析全部的HTML如何定位并且提取“Fair,3c”这个内容了。仔细看的话,这段数据位于第二个<br>和第三个<br>之间。由于工作人员写的还算是正规,于是可以通过字符串处理的几个函数进行定位了。详细的函数说明MSDN中有非常好的说明和及其繁琐和复杂而又变态的例子,喜欢的自己琢磨去吧。(PS废话一句,那帮人真是闲的把那几个例子写的还不如别人随边说一句话呢)我就代码说话,思路已经讲的很清楚了。具体实践过城中由于个别的特殊符号的出现我们还是需要具体问题具体分析的。下面函数得出结果。返回现在的温度。我要的是那个“3c”。写得有点啰嗦,不过好懂。
protected string GetTempNow(string aUrlXML) { XmlDocument aDoc = new XmlDocument(); aDoc.Load(aUrlXML); XmlNodeList nodes = aDoc.GetElementsByTagName("description"); string innerHTML = string.Empty; foreach (XmlNode node in nodes) { innerHTML = node.InnerText.ToString(); } innerHTML = innerHTML.ToLower(); int countHTML = innerHTML.IndexOf("br"); innerHTML = innerHTML.Substring(countHTML + 2); countHTML = innerHTML.IndexOf("br"); innerHTML = innerHTML.Substring(countHTML + 5); countHTML = innerHTML.IndexOf("br"); innerHTML = innerHTML.Remove(countHTML - 1, innerHTML.Length - countHTML).Trim("\n".ToCharArray()); string[] result = innerHTML.Split(",".ToCharArray()); innerHTML = result[1]; return innerHTML; }
总结:基本通过上面的几个步骤的提取和分析,就可以把几乎所有想要的数据提取出来了。剩下的就是前台页面的制作和美化了。
测试地址
简单加个链接目录,有兴趣的可以一起研究下:)
IP得到天气预报(1)———数据分析存储
IP得到天气预报(2)———IP运算和数据处理
IP得到天气预报(3)———XML中CDATA的提取
IP得到天气预报(4)———制作自己的RSS订阅
相关文章推荐
- IP得到天气预报(4)———制作自己的RSS订阅
- 用ASP+XMLHTTP编写天气预报程序
- <WP7>(四)手把手教你写天气预报程序:本地数据库SQL CE,XML数据解析
- Android之简易天气预报小应用(xml解析练手)
- 根据IP显示天气预报代码:只显示成一行,可在页面调用JS即可
- java调用webservice天气预报(SOAP请求的方式获取天气信息并解析返回的XML)
- 天气预报之提取城市代码:将含中文和数字的字符串分隔处理提取数组
- 通过IP查询客户端用户所在地的天气预报
- 利用webxml来构建wp的天气预报
- .Net 得到星期 和 天气预报
- <WP7>(四)手把手教你写天气预报程序:本地数据库SQL CE,XML数据解析
- 根据访问用户IP地址自动获取天气预报
- 用asp.net实现根据IP获取当地天气预报
- 用asp.net实现根据IP获取当地天气预报
- java调用webservice天气预报(SOAP请求的方式获取天气信息并解析返回的XML)
- 天气预报的webservice+三级无刷新级联菜单客户端(js+xmlhttp实现
- 用ASP+XMLHTTP编写一个天气预报程序
- 天气预报主界面--main_interaface.xml
- 使用SAX解析XML利用Google Weather服务制作天气预报异常解决办法
- asp.net实现根据IP获取当地天气预报