rome生成xml

import java.util.Date;

/**
* 频道下的子信息 此类无流媒体播放文件
*
* @author jackZhang
*
*/
public class ChannelItem {
  private String title;// Rss文件中Item的标题
  private String link;// Rss文件中Item对应的连接
  private String description;// Item的描述
  private Date pubDate;// Item发布的时间
  private String author;// Item作者
  private String category;// Item所属的频道范畴

  public String getTitle() {
      return title;
  }

  public void setTitle(String title) {
      this.title = title;
  }

  public String getLink() {
      return link;
  }

  public void setLink(String link) {
      this.link = link;
  }

  public String getDescription() {
      return description;
  }

  public void setDescription(String description) {
      this.description = description;
  }

  public Date getPubDate() {
      return pubDate;
  }

  public void setPubDate(Date pubDate) {
      this.pubDate = pubDate;
  }

  public String getAuthor() {
      return author;
  }

  public void setAuthor(String author) {
      this.author = author;
  }

  public String getCategory() {
      return category;
  }

  public void setCategory(String category) {
      this.category = category;
  }

ChannelEItem类,具体代码:

/**
* 用于添加频道的子项 当存在流媒体播放文件时使用此类
*
* @author jackZhang
*
*/
public class ChannelEItem extends ChannelItem {
   private String enclosure;// 流媒体文件

   public String getEnclosure() {
       return enclosure;
   }

   public void setEnclosure(String enclosure) {
       this.enclosure = enclosure;
   }
}

以下是具体的Rss生成器封装类RssBuildFactory,具体代码:
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.SyndCategoryImpl;
import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.feed.synd.SyndContentImpl;
import com.sun.syndication.feed.synd.SyndEnclosure;
import com.sun.syndication.feed.synd.SyndEnclosureImpl;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndEntryImpl;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndFeedImpl;
import com.sun.syndication.io.SyndFeedOutput;

/**
* 用于生成Rss文件
*
* @author jackZhang
*
*/
public class RssBuildFactory {
   private SyndFeed feed;
   @SuppressWarnings("unchecked")
   private List entries;
   private SyndEntry entry;

   @SuppressWarnings("unchecked")
   public RssBuildFactory() {
       feed = new SyndFeedImpl();
       feed.setFeedType("rss_2.0");
       entries = new ArrayList();
   }

   /**
   * 创建一个频道
   *
   * @param title
   *            频道标题
   * @param link
   *            频道对应的连接
   * @param description
   *            频道描述
   * @param language
   *            频道所用语言
   * @param pubDate
   *            频道发布时期
   * @param copyright
   *            版权所有
   * @throws Exception
   */
   public void buildChannel(String title, String link, String description,
           String language, Date pubDate, String copyright)
           throws RuntimeException {
       feed.setTitle(title);
       feed.setLink(link);
       feed.setDescription(description);
       feed.setLanguage(language);
       feed.setPublishedDate(pubDate);
       feed.setCopyright(copyright);
   }

   /**
   * 添加频道的子内容
   *
   * @param item
   *            <a href="mailto:%7B@link">{@link</a> ChannelItem}
   * @throws Exception
   */
   @SuppressWarnings("unchecked")
   public void buildItems(ChannelItem item) throws RuntimeException {
       entry = new SyndEntryImpl();
       // 设置新闻标题
       entry.setTitle(item.getTitle());
       // 设置新闻的连接地址
       entry.setLink(item.getLink());
       // 设置新闻简介
       SyndContent content = new SyndContentImpl();
       content.setType("text/plain");
       content.setValue(item.getDescription());
       entry.setDescription(content);
       // 设置发布时间
       entry.setPublishedDate(item.getPubDate());
       // 设置频道所属的范围
       SyndCategory cate = new SyndCategoryImpl();
       cate.setName(item.getCategory());
       List cateList = new ArrayList();
       cateList.add(cate);
       entry.setCategories(cateList);
       // 设置作者
       entry.setAuthor(item.getAuthor());
       // 将新闻项添加至数组中
       entries.add(entry);
   }

   /**
   * 添加频道的内容项
   *
   * @param item
   *            <a href="mailto:%7B@link">{@link</a> ChannelEItem}此类继承自ChannelItem类
   * @throws Exception
   */
   @SuppressWarnings("unchecked")
   public void buildItems(ChannelEItem item) throws RuntimeException {
       entry = new SyndEntryImpl();
       // 设置新闻标题
       entry.setTitle(item.getTitle());
       // 设置新闻的连接地址
       entry.setLink(item.getLink());
       // 设置新闻简介
       SyndContent content = new SyndContentImpl();
       content.setValue(item.getDescription());
       entry.setDescription(content);
       // 设置发布时间
       entry.setPublishedDate(item.getPubDate());
       // 设置频道所属的范围
       SyndCategory cate = new SyndCategoryImpl();
       cate.setName(item.getCategory());
       List cateList = new ArrayList();
       cateList.add(cate);
       entry.setCategories(cateList);
       // 设置作者
       entry.setAuthor(item.getAuthor());
       // 设置流媒体播放文件
       SyndEnclosure en = new SyndEnclosureImpl();
       en.setUrl(item.getEnclosure());
       List enList = new ArrayList();
       enList.add(en);
       entry.setEnclosures(enList);
       // 将新闻项添加至数组中
       entries.add(entry);
   }

   /**
   * 生成XML文件
   *
   * @param filePath
   *            文件保存路径和名称
   * @throws Exception
   */
   public void buildChannel(String filePath) throws Exception {
       feed.setEntries(entries);
       SyndFeedOutput output = new SyndFeedOutput();
       Writer writer;
       writer = new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8");
       output.output(feed, writer);
   }


下面是一个示例,用于测试生成Rss:

前提说明本人测试使用的Mysql数据库,数据库存在一个newsitem表用于储存Rss内容。
public void testBuildObject() {  
try {  
 
 //建立数据库的连接  
   DBConnection db = new DBConnection();  
 
 //查询Sql语句  
   String querySql = "select * from newitem";  
 
  //getAllResult方法是一个查询方法,感兴趣的话也可以自己写  
   ResultSet rs = db.getAllResult(querySql);  
 
 //建立Rss生成器工厂  
   RssBuildFactory builder = new RssBuildFactory();  
 
  //循环遍历数据库记录生成Rss中的Item项  
  while (rs.next()) {  
    ChannelEItem item = new ChannelEItem();  
    item.setTitle(rs.getString("title"));  
    item.setLink(rs.getString("link"));  
    item.setDescription(rs.getString("description"));  
    item.setPubDate(rs.getDate("pubdate"));  
    item.setCategory(rs.getString("category"));  
    item.setAuthor(rs.getString("author"));  
    item.setEnclosure(rs.getString("enclosure"));  
    builder.buildItems(item);  
   }  
 
  //建立Rss的Channel信息  
   builder.buildChannel("Jack的测试", "<a href="http://www.fansgoo.com/" target="_blank">www.fansgoo.com</a>", "测试生成", "zh-cn",  
    new Date(), "河南亿禧软件有限公司");  
 
 //设置Rss文件的生成路径  
   builder.buildChannel("E:\\demo.xml");  
  } catch (Exception e) {  
   e.printStackTrace();

你可能感兴趣的:(sql,xml,mysql,软件测试,sun)