惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Scott Helme
Scott Helme
P
Proofpoint News Feed
D
Docker
The Hacker News
The Hacker News
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
GbyAI
GbyAI
Jina AI
Jina AI
P
Proofpoint News Feed
P
Privacy & Cybersecurity Law Blog
T
Threat Research - Cisco Blogs
C
CERT Recently Published Vulnerability Notes
博客园 - 叶小钗
U
Unit 42
博客园_首页
Apple Machine Learning Research
Apple Machine Learning Research
Latest news
Latest news
T
The Exploit Database - CXSecurity.com
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
T
Threatpost
V
Vulnerabilities – Threatpost
C
Cisco Blogs
Spread Privacy
Spread Privacy
Cisco Talos Blog
Cisco Talos Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
V
Visual Studio Blog
G
GRAHAM CLULEY
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
G
Google Developers Blog
Know Your Adversary
Know Your Adversary
F
Fortinet All Blogs
H
Hackread – Cybersecurity News, Data Breaches, AI and More
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
L
Lohrmann on Cybersecurity
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Announcements
Recent Announcements
量子位
S
Schneier on Security
I
Intezer
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Darknet – Hacking Tools, Hacker News & Cyber Security

博客园 - 飞翔的Angela

北京到济南的长途汽车一览表 狮 子 座 Leo 07/23~08/22 台湾偶像剧 什么是程序员的优秀品质? 概要设计怎么写? 睡前不能吃的五种食物 初始OpenID 向腹部赘肉大声说byebye 减掉腿部赘肉——easy啦(附插图) 学习Ajax框架之dojo:第十三节——如何编写自己的dojo widget 喜欢和爱的区别 学习RSS2.0规范 如何保存个性化主页? 让人心疼的12句话,哪句说到你的痛了? B型狮子座 使用 JSON 进行数据的异步传输 dom4j引发的错误 基于ajax技术的单一数据源的数据关联的设计与实现 使用 JavaScript 获取 table 行号和列号(附源代码)
ROME解析器和生成器的使用方法(附有源代码)
飞翔的Angela · 2008-10-27 · via 博客园 - 飞翔的Angela

摘要:使用ROME的解析器对读取一个Feed的操作是非常简单的,解析器可以从一个网址、一个本地文件或文件流中读取转换数据。将RSS子项列表信息以表格的形式显示出关键的几项,如标题、链接地址、标题简介。同时,ROME可以直接操作SyndFeed来构造Feed数据,实现从一个存在的Feed地址里读取解析到再输出生成一个Feed的过程。更多内容和使用方法,请参考ROME的官方资料:ROME,开发文档教程,API文档。

ROME是一个基于Java的开源程序包。ROME提供了一组Atom/RSS工具类,以使得用Java可以更方便和快捷的来操作大部分Syndication格式数据。

ROME包含了一组解析器和生成器,以使得在程序中不仅能够方便的解析各种格式的数据,也可以方便的生成出所指定格式的数据。ROME的解析器和生成器是配合使用的,解析器在解析完源数据之后,会生成一个ROME提供的中间对象(SyndFeed),这个对象包括了源数据中的所有信息,然后生成器以这个对象(SyndFeed)作为媒介,输出成程序所指定的数据格式。

使用ROME的解析器对读取一个Feed的操作是非常简单的,解析器可以从一个网址、一个本地文件或文件流中读取转换数据,使用的java语句如下:

// 取链接地址

URL feedUrl = new URL("http://www.java.com/rss.xml");

// RSS资源

XmlReader reader = new XmlReader(feedUrl);

// SyndFeedInput对象,即得到RSS源里的所有信息

SyndFeedInput input = new SyndFeedInput();

SyndFeed feed = input.build(reader);

此时,就把http://www.java.com/rss.xml 址的Feed数据转换成了ROME的对象SyndFeed。有了SyndFeed之后,RSS子项列表信息便可以轻易得到了,以表格的形式显示出关键的几项,如标题、链接地址、标题简介,使用的java语句如下:

StringBuffer rssReader = new StringBuffer();

rssReader.append("<table border=1><tr><th>Title</th><th>URL</th><th>Description</th></tr>");

// 得到Rss中子项列表  

List entries = feed.getEntries();  

// 循环得到每个子项信息  

for (int i = 0; i < entries.size(); i++)

{  

SyndEntry entry = (SyndEntry) entries.get(i);  

// 标题、连接地址、标题简介是一个Rss源项最基本的组成部分  

rssReader.append("<tr><td>");

rssReader.append(entry.getTitle());

rssReader.append("</td>");

rssReader.append("<td>");

rssReader.append(entry.getLink());

rssReader.append("</td>");  

SyndContent description = entry.getDescription();                        

rssReader.append("<td>");

rssReader.append(description.getValue());

rssReader.append("</td></tr>");  

}  

rssReader.append("</table>");     

System.out.println(rssReader.toString());

resultRSSreader = rssReader.toString();

如果将这个SyndFeed重新转换生成为指定的Syndication格式数据,操作也是比较简单的,使用的Java代码:

Writer writer = new FileWriter("./test.xml");

feed.setFeedType(feedType); // 设定feed输出的格式

SyndFeedOutput output = new SyndFeedOutput();

output.output(feed, writer);

writer.close();

以上是演示了如何从一个存在的Feed地址里读取解析到再输出生成一个Feed的过程。实际上,在ROME里,还可以直接操作SyndFeed来构造Feed数据,使用的Java代码:

// 构造一个SyndFeed新对象

SyndFeed feed = new SyndFeedImpl();

// 设置Feed类型

feed.setFeedType(feedType);

// 设置Feed基本信息

feed.setTitle("测试Feed");

feed.setLink("http://www.thedevlog.com");

feed.setDescription("测试使用ROME来构造Feed数据");

// 构造Feed items列表

List entries = new ArrayList();

SyndEntry entry;

SyndContent description;

// 构造一个新的节点并添加到列表中

entry = new SyndEntryImpl();

entry.setTitle("ROME v1.0");

entry.setLink("http://wiki.java.net/bin/view/Javawsxml/Rome01");

entry.setPublishedDate(DATE_PARSER.parse("2004-06-08"));

description = new SyndContentImpl();

description.setType("text/plain");

description.setValue("Initial release of ROME");

entry.setDescription(description);

entries.add(entry);

// 设置更多的节点...

// 将节点列表赋给feed对象

feed.setEntries(entries);

// 输出feed

Writer writer = new FileWriter("./test.xml");

SyndFeedOutput output = new SyndFeedOutput();

output.output(feed, writer);

writer.close();

整个过程是十分简单的。除了上述功能外,通过ROME还可以将两个或多个Feed合并为一个Feed,将一个Feed拆分为多个Feed等。

更多内容和使用方法,请参考ROME的官方资料:ROME,开发文档教程,API文档。