用Rome解析Rss的例子html
须要的jar包java
rome.jar 可到http://wiki.java.net/bin/view/Javawsxml/Rome下载最新的网络
jdom.jardom
java代码工具
package com.test; import java.net.URL; import java.util.List; import com.sun.syndication.feed.synd.SyndCategory; import com.sun.syndication.feed.synd.SyndContent; import com.sun.syndication.feed.synd.SyndEnclosure; import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.io.SyndFeedInput; import com.sun.syndication.io.XmlReader; public class TestParse { public static void main(String[] args) { TestParse test = new TestParse(); test.parseRss(); } public void parseRss() { // String rss = "http://news.baidu.com/n?cmd=1&class=civilnews&tn=rss&sub=0]http://news.baidu.com/n?cmd=1&class=civilnews&tn=rss&sub=0"; String rss = "http://rss.sina.com.cn/ent/hot_roll.xml"; try { URL url = new URL(rss); // 读取Rss源 XmlReader reader = new XmlReader(url); System.out.println("Rss源的编码格式为:" + reader.getEncoding()); SyndFeedInput input = new SyndFeedInput(); // 获得SyndFeed对象,即获得Rss源里的全部信息 SyndFeed feed = input.build(reader); //System.out.println(feed); // 获得Rss新闻中子项列表 List entries = feed.getEntries(); // 循环获得每一个子项信息 for (int i = 0; i < entries.size(); i++) { SyndEntry entry = (SyndEntry) entries.get(i); // 标题、链接地址、标题简介、时间是一个Rss源项最基本的组成部分 System.out.println("标题:" + entry.getTitle()); System.out.println("链接地址:" + entry.getLink()); SyndContent description = entry.getDescription(); System.out.println("标题简介:" + description.getValue()); System.out.println("发布时间:" + entry.getPublishedDate()); // 如下是Rss源可先的几个部分 System.out.println("标题的做者:" + entry.getAuthor()); // 此标题所属的范畴 List categoryList = entry.getCategories(); if (categoryList != null) { for (int m = 0; m < categoryList.size(); m++) { SyndCategory category = (SyndCategory) categoryList.get(m); System.out.println("此标题所属的范畴:" + category.getName()); } } // 获得流媒体播放文件的信息列表 List enclosureList = entry.getEnclosures(); if (enclosureList != null) { for (int n = 0; n < enclosureList.size(); n++) { SyndEnclosure enclosure = (SyndEnclosure) enclosureList.get(n); System.out.println("流媒体播放文件:" + entry.getEnclosures()); } } System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }
参考资料网站
Rome简介ui
Rome是为RSS聚合而开发的开源包,它能够支持0.9一、0.9二、0.9三、0.9四、1.0、2.0,能够说rss的版本基本上都支持了。编码
Rss简介 url
RSS是站点用来和其余站点之间共享内容的一种简易方式(也叫聚合内容),一般被用于新闻和其余按顺序排列的网站,例如Blog。
RSS就是一种用来分发和聚集网页内容的XML格式!
RSS =Really Simple Syndication(真正简单的聚合 )或Rich Site Summary(丰富站点摘要 )
Rss目前已经被普遍的应用 也是xml应用中的最成功的一项。
RSS 没有统一标准,目前被使用的版本主要有0.9一、1.0、2.0 spa
RSS的理解
拿一个新闻网站来讲,若是这个网站使用了RSS技术,也即表示这个网站按照RSS标准将其新闻罗列出来,生成一个RSS文件一般称为(RSS Feed,其实也就是一个*.xml文件)。其余网站或我的就订阅该新闻网站的新闻 ,其实也就是读取了新闻网站提供的RSS文件,既然说是”订阅“即表示这个过程是动态的,即主要体如今新闻网站上的内容更新了,浏览者也同时获得了更新后的内容。固然这要借助工具。
目的及做用
网站内容资源共享
能够自由选择想要浏览的新闻
不用一个网站一个网站,一个网页一个网页去逛了。只要这将你须要的内容订阅在一个RSS阅读器中,这些内容就会自动出现你的阅读器里,你也没必要为了一个急切想知道的消息而不断的刷新网页,由于一旦有了更新,RSS阅读器就会本身通知你!
RSS的联合(Syndication)
发布一个RSS文件(通常称为RSS Feed)后,这个RSS Feed中包含的信息就能直接被其余站点调用,并且因为这些数据都是标准的XML格式,因此也能在其余的终端和服务中使用,如PDA、手机、邮件列表等。并且一个网站联盟(好比专门讨论旅游的网站系列)也能经过互相调用彼此的RSS Feed自动的显示网站联盟中其余站点上的最新信息,这就叫着RSS的联合。
这种联合就致使一个站点的内容更新越及时、RSS Feed被调用的越多,该站点的知名度就会越高,从而造成一种良性循环
RSS的聚合(Aggregation)
所谓RSS聚合,就是经过软件工具的方法从网络上搜集各类RSS Feed并在一个界面中提供给读者进行阅读。这些软件能够是在线的WEB工具 也能够是客户端软件
Rss浏览
RSS是一个纯xml文件,将RSS里的新闻友好的显示出来就要借助于RSS阅读器
RSS阅读器其实就是一个客户端软件或内嵌程序,将各个新闻站点提供的xml文件(RSS Feed)中内容读取出来,将全部新闻分门别类的显示在软件中。分类管理也就是所谓的频道管理。
Rss文件格式
下面是一个Rss文件(*.xml),里面的注释是本身加的,<!-- 和-->之间为注释。
<?xml version="1.0" encoding="utf-8" ?>
<!-- 声明当前文件为xml文档【必】
-->
<rss version="2.0">
<!-- 声明当前文件内容为rss格式文件,属性version(必须)指定当前rss版本【必】
-->
<channel>
<!-- 固有节点【必】
-->
<title>新闻中心-国内焦点新闻</title>
<!-- 对网站和当前RSS 文件的简短描述【必】
-->
<image>
<!-- 为当前RSS添加图片
-->
<title>新闻中心-国内焦点</title>
<!-- 图片标题对图片的简单描述
-->
<link>http://news.sina.com.cn/china</link>
<!-- 网站连接地址
-->
<url>http://image2.sina.com.cn/dy/gn/in10.jpg</url>
<!-- 图片的连接地址
-->
</image>
<description>国内焦点新闻列表</description>
-<!-- 对当前RSS文件的描述【必】
-->
<link>http://news.sina.com.cn/china/index.shtml</link>
<!-- 网站主页连接【必】
-->
<language>zh-cn</language>
<!-- 当前RSS使用的语言
-->
<generator>WWW.SINA.COM.CN</generator>
<!-- 当RSS文件为自动建立时多存在此节点(RSS文件由什么建立)
-->
<ttl>5</ttl>
<!-- (ttl = time to live) 在刷新前当前RSS在cache中能够保存多长时间(分钟)
-->
<copyright>Copyright 1996 - 2005 SINA Inc. All Rights Reserved</copyright>
<!-- 声明版权
-->
<pubDate>Wed, 26 Apr 2006 01:45:05 GMT</pubDate>
<!-- 当前RSS最后发布的时间
-->
<category />
<!-- 声明当前RSS内容的种类
-->
<item>
<!-- 一条信息
-->
<title>最高检:严惩公务员利用审批等权力索贿受贿</title>
<!-- 新闻标题【必】
-->
<link>http://news.sina.com.cn/c/l/2006-04-26/08029720281.shtml</link>
<!-- 新闻连接【必】
-->
<author>WWW.SINA.COM.CN</author>
<!-- 新闻做者
-->
<guid>http://news.sina.com.cn/c/l/2006-04-26/08029720281.shtml</guid>
<!-- guid>GUID=Globally Unique Identifier 为当前新闻指定一个全球惟一标示
-->
<category>国内焦点新闻</category>
<!-- 新闻种类
-->
<pubDate>Wed, 26 Apr 2006 00:02:53 GMT</pubDate>
<!-- 新闻最后发布时间
-->
<comments />
<!-- 新闻注释
-->
<description>新华网沈阳4月25日电 (记者 杨维汉、范春生) 最高人民检察院常务副检察长张耕说,对于国家公务员在商业活动中利用职权谋取非法利益、索贿受贿的案件,必须发现一块儿,坚定查处一块儿。特别是对国家公务员利用行政审批权、行政执法权和司法权执法犯法、贪赃枉法、索贿受贿,构成犯....</description>
<!-- 新闻的简单描述【必】
-->
</item>
</channel>
</rss>
第一行 声明当前文件是xml文档第二行声明当前文件内容为rss格式文件,属性version(必须)指定当前rss版本为2.0 <channel>节点为Rss文档的固有节点,必须,无属性。<item> 节点中即纪录了当前RSS Feed中要显示的内容。一个RSS文件中一般包含多个<item>节点<channel>节点必须节点<title> 对网站和当前RSS 文件的简短描述<link> 网站主页连接<description> 对当前RSS文件的描述可选节点<image> 为当前RSS添加图片<language> 当前RSS使用的语言<generator>当RSS文件为自动建立时多存在此节点(RSS文件由什么建立)<ttl>(ttl = time to live) 在刷新前当前RSS在cache中能够保存多长时间(分钟)<copyright>声明版权<pubDate> 当前RSS最后发布的时间<category>声明当前RSS内容的种类 等等<item>节点<item> 纪录一条信息(新闻),只包含这条新闻的简单信息,一个RSS文件中包含几条新闻就会有几个<item>必须节点<title> 新闻标题 <link> 新闻连接<description> 新闻的简单描述可选节点<author> 当前新闻的做者<guid>GUID=Globally Unique Identifier 为当前新闻指定一个全球惟一标示<category>当前新闻的类别<pubDate>当前新闻的最后发布时间<comments>当前新闻的注释等等