使用rome创建RSS格式的xml

 项目文档里推荐使用romersslib4j来生成rss格式的xml。

rome是dev.java.net下的一个开源的项目,是一个“解析、创建、发布RSS和ATOM格式”的工具集,支持RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland, RSS 0.92, RSS 0.93, RSS 0.94, RSS 1.0, RSS 2.0, Atom 0.3, and Atom 1.0 等众多版本,对rss和atom中的各个模块都进行了很好的封装,“很好很强大”。

rsslib4j是gnu下的一个开源项目,“Rsslib4j is a set of Java API to parse and retrive information from a RSS Feed. It supports RSS version 0.9x ,1.0 and 2.0 specification with Doublin Core and Syndication namespace”,懒得翻译了,从名字就可以看出来,它只局限于rss相关的功能,相当于是被“阉割”了的rome吧。

分别下载了两个项目的文件,看了看文档和API,里面的类基本上都差不多,也不知道用哪个好些。考虑到rome比较大而全,因此考虑使用rome来构建项目的rss生成服务。

使用rome需要把rome-0.9.jar加入classpath,除此之外并没有其他的依赖。

一般的,创建一个rss格式的xml文档需要用到如下包:

com.sun.syndication.feed.rss 顾名思义,这个包里是封装了rss各个部分的对象,如channel,item等等

com.sun.syndication.feed.rss
Classes

Category
Channel
Cloud
Content
Description
Enclosure
Guid
Image
Item
Source
TextInput


com.sun.syndication.io 这个包里的类负责解析,输出等io操作

com.sun.syndication.io

Interfaces
DelegatingModuleGenerator
DelegatingModuleParser
ModuleGenerator
ModuleParser
WireFeedGenerator
WireFeedParser

Classes
SAXBuilder
SyndFeedInput
SyndFeedOutput
WireFeedInput
WireFeedOutput
XmlReader

Exceptions
FeedException
ParsingFeedException
XmlReaderException

下面是一个我学习rome过程中写的一个小例子:

package djn.test.rss.rome;

import com.sun.syndication.feed.rss.*;
import com.sun.syndication.io.FeedException;
import com.sun.syndication.io.WireFeedOutput;
import java.util.*;

public class RssFeedFactory {
  
    public static void main(String [] args){
        //新建Channel对象,对应rss中的<channel></channel>
       
        /* Channel对象有两个构造器,一个默认的无参构造器用于clone对象,
        * 平时创建Channel对象时只能使用有参构造器Channel(String type)
        * 这个参数type很讲究,起初我随便填写了一些字符串,都抛出异常,非法的type
        * 后来逼急了,上网把rome源码搞下来,才搞明白type得是"rss_x.x"这样的
        * rome的文档里也没有写明,浪费了不少时间研究这个type究竟应该是什么。
        */
        Channel channel = new Channel("rss_2.0");
        channel.setTitle("Test RSS channel's title");
        channel.setDescription("channel的描述");
        channel.setLink("http://hi.baidu.com/openj/rss");
        channel.setEncoding("GBK");
       
        //这个list对应rss中的item列表
        List items = new ArrayList();
        //新建Item对象,对应rss中的<item></item>
        Item item = new Item();
        item.setAuthor("item author jnduan");
        item.setTitle("item title");
       
        //新建一个Description,它是Item的描述部分
        Description description = new Description();
        description.setType("item description type");
        description.setValue("item description value");
        item.setDescription(description);
       
        items.add(item);
        channel.setItems(items);
       
        //用WireFeedOutput对象输出rss文本
        WireFeedOutput out = new WireFeedOutput();
        try {
            System.out.println(out.outputString(channel));
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (FeedException e) {
            e.printStackTrace();
        }
    }
}

运行结果如下:

<?xml version="1.0" encoding="GBK"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
<channel>
    <title>Test RSS channel's title</title>
    <link>http://hi.baidu.com/openj/rss</link>
    <description>channel的描述</description>
    <item>
      <title>item title</title>
      <description>item description value</description>
      <author>item author jnduan</author>
    </item>
</channel>
</rss>

总体来说,rome以及rsslib4j的用法很简单,只要弄明白rss文本的结构就很容易写出生成rss文本的程序,下一步,计划如何编写一个通用的服务,很好的完成业务上的需求。

相关文章:
《RSS格式规范》

### 回答1: 可以使用以下 SQL 语句创建唯一约束并验证其是否生效: ALTER TABLE Rome ADD CONSTRAINT IX_Rname UNIQUE (Rname DESC); -- 验证约束是否生效 SELECT COUNT(*) FROM Rome GROUP BY Rname HAVING COUNT(*) > 1; 如果返回结果为 0,则表示约束生效,否则表示约束未生效。 ### 回答2: 要为数据表Rome创建按照Rname降序排列的唯一约束,可以使用ALTER TABLE语句来添加约束。具体的步骤如下: 1. 使用以下语句在Rome表中创建唯一约束: ALTER TABLE Rome ADD CONSTRAINT IX_Rname UNIQUE (Rname DESC); 2. 执行上述语句后,系统将会在Rome表中创建一个名为IX_Rname的唯一约束,该约束会根据Rname列的值进行降序排列。 3. 验证该约束是否生效,可以通过插入重复的Rname值来尝试违反唯一约束: INSERT INTO Rome (Rname) VALUES ('John'); INSERT INTO Rome (Rname) VALUES ('John'); 如果唯一约束生效,则第二条插入语句将会执行失败并抛出错误提示,提示该操作违反了唯一约束。 4. 另外,您还可以使用以下语句来查看Rome表的约束信息,以确保约束已经被正确添加: SHOW CONSTRAINTS FROM Rome; 通过执行以上步骤,您就可以成功创建按照Rname降序排列的唯一约束,并验证该约束是否生效。 ### 回答3: 要为数据表Rome创建按照Rname降序排列的唯一约束,我们可以使用以下的SQL语句: ALTER TABLE Rome ADD CONSTRAINT IX_Rname UNIQUE (Rname DESC); 这个语句会向Rome表添加一个新的唯一约束,限制了Rname这一列的值必须是唯一的,并且按照降序排列。 为了验证这个约束是否生效,我们可以插入一些具有重复Rname值的数据,然后检查是否会有报错信息。例如,我们可以插入以下的SQL语句: INSERT INTO Rome (Rname) VALUES ('Alex'); INSERT INTO Rome (Rname) VALUES ('John'); INSERT INTO Rome (Rname) VALUES ('Alex'); 如果唯一约束生效,执行最后一条插入语句时应该会出现一个报错信息,提示违反了唯一约束IX_Rname。这证明了这个约束已经成功应用在Rname列上。如果没有出现报错信息,那么可能代表约束没有生效或者已经被绕过。 因此,要验证一个约束是否生效,可以通过尝试插入测试数据并观察是否会出现违反约束的报错信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值