Rome 是 java.net 上的一个开源项目,不仅包括各种syndication feeds的解析器与生成器,而且还包括能够把一种格式转换成另外一种格式的转换器。
如下是我生成网站的rss的代码:
java 代码
- // Rome中RSS的可选标准
- // rss_0.90, rss_0.91, rss_0.92, rss_0.93, rss_0.94, rss_1.0, rss_2.0, atom_0.3
- private static final String RSS_TYPE = "rss_2.0";
- // 取出频道下面的所有文章
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- // 得到RSS数据操作接口
- RssDao rssDao = (RssDao)getBean(RssDao.class);
- Channel channel = "频道对象";
- List articles = "查询出来的所有频道文章";
- outputRssFeed(response, rssDao.createChannelFeed(channel, articles));
- return null;
- }
- // 将SyndFeed写入HttpServletResponse
- private boolean outputRssFeed(HttpServletResponse response, SyndFeed feed) {
- boolean result = false;
- feed.setFeedType(RSS_TYPE);
- response.setContentType(MIME_TYPE);
- SyndFeedOutput output = new SyndFeedOutput();
- try {
- output.output(feed, response.getWriter());
- result = true;
- } catch (IOException e) {
- e.printStackTrace();
- } catch (FeedException e) {
- e.printStackTrace();
- }
- return result;
- }
- //rssDao的方法
- public SyndFeed createChannelFeed(Channel channel,List articles){
- SyndFeed feed = new SyndFeedImpl();
- // 设置RSS标题
- feed.setTitle(channel.getTitle() + "频道");
- // 设置标题的链接
- feed.setLink("http://*******");
- // 设置描述
- feed.setDescription(channel.getDescription());
- feed.setEntries(getChannelEntries(articles));
- return feed;
- }
- private List getChannelEntries(List articles) {
- List entries = new ArrayList();
- SyndEntry entry;
- SyndContent description;
- // 创建item集合
- for (ChannelArticle article : articles) {
- entry = new SyndEntryImpl();
- entry.setTitle(article.getTitle());
- entry.setLink("每篇文章的链接");
- entry.setPublishedDate(new Date());
- description = new SyndContentImpl();
- description.setType("text/html");
- description.setValue(article.getContent());
- entry.setDescription(description);
- entries.add(entry);
- }
- return entries;
- }