森林海
以下是一个RSS文件的标准结构:<rss version="2.0"><channel><title>...</title><link>...</link><description>...</description><copyright>...</copyright><generator>...</generator><lastBuildDate>...</lastBuildDate><image>...</image><item>...</item><item>...</item>...<item>...</item><item>...</item></channel></rss>其中rss元素是其根元素,它吧所有的内含信息包含在一个频道<channel>中,频道有许多meta信息,就是出现 在<item>前面的所有子元素。而rss中的所有摘要,都以<item>元素的形式出现,一个<channel> 可以有多个<item>。每个<item>同样有元信息,最重要的是描述<description>和链 接<link>。现在有很多工具可以生成RSS,事实上,因为本质上RSS是一个XML文件,所以你完全可以以手工编写XML 文件的形式编写RSS,但是还是推荐用工具来简化操作和减少错误,我最喜欢用的工具是:http://www.onlinedown.net/soft /73066.htm其实,不仅仅RSS阅读器可以获取RSS信息,我们用java API也是可以的。比较有名的是sourceforge的rsslib4j 包,我们这里就展示这个包的用法:这个包可以到http://sourceforge.net/projects/rsslib4j/ 去下,对应的javadoc地址是http://rsslib4j.sourceforge.net/javadoc/实验部分:我们演示2个例子,一个是读取本地rss文件的信息,一个是读取网络上某rss文件的信息:首先我们开发了一个工具类,这个类的工具方法可以分离出相关信息并且转为字符串形式:package com.charles.learnrss;import java.util.List;import org.gnu.stealthp.rsslib.RSSChannel;import org.gnu.stealthp.rsslib.RSSHandler;import org.gnu.stealthp.rsslib.RSSImage;import org.gnu.stealthp.rsslib.RSSItem;/** This file is confidential by Charles.Wang* Copyright belongs to Charles.wang* You can make contact with Charles.Wang (charles_wang888@126.com)*/public class RSSInfoRetriever {public static String getRSSInfo(RSSHandler handler){StringBuffer rssInfo = new StringBuffer();//取得rss提要的频道信息(Channel)RSSChannel channel = handler.getRSSChannel();//Part1: 分离出rss频道的元信息//(1)频道的标题String titleInfo = channel.getTitle();//(2)频道的链接信息String linkInfo = channel.getLink();//(3)频道的描述信息String descriptionInfo = channel.getDescription();//(4)频道使用的语言String languageInfo = channel.getLanguage();//(5)频道版权信息String copyrightInfo = channel.getCopyright();//(6)频道的generator的信息String generatorInfo = channel.getGenerator();//(7)频道的image信息RSSImage channelImage = channel.getRSSImage();String channelImageUrl = channelImage.getUrl();rssInfo.append("频道标题: "+titleInfo+"n");rssInfo.append("频道相关Link信息: "+linkInfo+"n");rssInfo.append("频道描述信息: "+descriptionInfo+"n");rssInfo.append("频道使用的语言: "+languageInfo+"n");rssInfo.append("频道版权信息: "+copyrightInfo+"n");rssInfo.append("频道产生器信息: "+generatorInfo+"n");rssInfo.append("频道图片URL: "+channelImageUrl+"n");//Part2: 分离出rss频道的所有摘要(feed),这里用item表示List channelItems = channel.getItems();int itemSize= channelItems.size();if(itemSize >=1){rssInfo.append("n");rssInfo.append("一共有 "+itemSize+"个摘要在这个频道中");rssInfo.append("n");for (int i=0;i<itemSize;i++){int itemNo = i+1;RSSItem item = (RSSItem)channelItems.get(i);rssInfo.append("n");rssInfo.append("摘要"+itemNo+":");//(1)摘要的作者String itemAuthor = item.getAuthor();//(2)摘要的标题String itemTitle = item.getTitle();//(3)摘要的描述String itemDescription = item.getDescription();//(4)摘要的链接String itemLink = item.getLink();//(5)摘要的发布日期String itemPubDate = item.getPubDate();rssInfo.append("作者: "+itemAuthor+"n");rssInfo.append("标题: "+itemTitle+"n");rssInfo.append("描述: "+itemDescription+"n");rssInfo.append("链接: "+itemLink+"n");rssInfo.append("发布日期: "+itemPubDate+"n");rssInfo.append("n");}}return rssInfo.toString();}}然后我们写了一个驱动类,这个驱动类封装了个实验:package com.charles.demo;import java.net.URL;import org.gnu.stealthp.rsslib.RSSChannel;import org.gnu.stealthp.rsslib.RSSException;import org.gnu.stealthp.rsslib.RSSHandler;import org.gnu.stealthp.rsslib.RSSParser;import com.charles.learnrss.RSSInfoRetriever;/**** Description:** @author charles.wang* @created May 10, 2012 9:07:13 AM**/public class RSSInfoRetrieverDemo {// 这里定义一个本地的rss摘要,(对应我的博客空间)public static final String localRSS = "charles.rss";//这里定义一个远程的rss摘要的地址(对应人民网)public static final String remoteRSS="http://www.people.com.cn/rss/politics.xml";public static void main(String[] args) throws Exception {// DEMO 1: 让RSSParser去解析本地某个rss文件// 取得本地的rssRSSHandler localRSSHandler = new RSSHandler();RSSParser.parseXmlFile(localRSS, localRSSHandler, false);// 取得rss元素的信息并且打印在控制台上String localRSSInfo=RSSInfoRetriever.getRSSInfo(localRSSHandler);System.out.println("*************Charles博客的 rss信息如下****************");System.out.println(localRSSInfo);System.out.println("****************************************************");// DEMO 2: 让RSSParser去解析远程rss的url// 取得远程的rssRSSHandler remoteRSSHandler = new RSSHandler();RSSParser.parseXmlFile(new URL(remoteRSS), remoteRSSHandler, false);// 取得rss元素的信息并且打印在控制台上String remoteRSSInfo=RSSInfoRetriever.getRSSInfo(remoteRSSHandler);System.out.println("****************人民网的 rss信息如下******************");System.out.println(remoteRSSInfo);System.out.println("****************************************************");}}实验:读取本地的rss文件(charles.rss)这个文件部分内容为:双击代码全选<rss version="2.0"><channel><title><![CDATA[ 平行线的凝聚-51CTO技术博客 ]]></title><link><![CDATA[ http://supercharles888.blog.51cto.com ]]></link><description><![CDATA[ Latest 20 blogs of charles_wang8888 ]]></description><copyright><![CDATA[ Copyright(C) 51CTO技术博客-领先的IT技术博客 ]]></copyright><generator><![CDATA[ 51CTO BLOG by 51CTO Studio ]]></generator><lastBuildDate>Thu, 01 Jan 1970 00:00:00 GMT</lastBuildDate><image><url><![CDATA[ http://img1.51cto.com/image/skin/1/rss.gif ]]></url><title><![CDATA[ 51CTO BLOG ]]></title><link><![CDATA[ http://blog.51cto.com ]]></link><description><![CDATA[ 51CTO技术博客-领先的IT技术博客 ]]></description></image><item><title><![CDATA[ 跨域访问的解决方案(非HTML5的方法1:JSONP) ]]></title><description><![CDATA[跨域访问一直是困扰很多开发者的问题之一。因为涉及到安全性问题,所以跨域访问默认是不可以进行的,否则假设今天我写了一段js去更改google的图标,明天他写了一段代码去吧google首页的文字全部变成梵文,那还得..【<a href="http://supercharles888.blog.51cto.com/609344/856886" target="_blank">继续阅读全文</a>】]]></description><link><![CDATA[http://supercharles888.blog.51cto.com/609344/856886]]></link><author><![CDATA[ charles_wang8888 ]]></author><category><![CDATA[ Web开发 ]]></category><pubDate>Tue, 08 May 2012 04:02:42 GMT</pubDate></item>...</channel></rss>