rome+xslt rss解決方案

rome生成rss文件
[code]
private static final String DEFAULT_FEED_TYPE = "default.feed.type";
private static final String FEED_TYPE = "type";
private static final String MIME_TYPE = "application/xml; charset=GB2312";
private static final String COULD_NOT_GENERATE_FEED_ERROR = "Could not generate feed";
private static final String DATE_FORMAT = "yyyy-MM-dd";
private String _defaultFeedType;

public void transferFunds(ArrayList<InfoGenre> genre,ArrayList<InfoPro> pro,String genreid){
String fileName="";
InfoGenre gen=genre.get(0);
try {
String feedType = "rss_2.0";//指定rss類型

String value = "";
Properties prop = new Properties();
String url=this.getClass().getResource("/rss.properties").getPath().trim();
url=url.replaceAll("%20"," ");
InputStream fis = new FileInputStream(url);
prop.load(fis);
value = prop.getProperty("address");

fileName = value+"//"+genreid+"//"+genreid+".xml";//靜態rss存放目錄
String xslpath=value;
DateFormat dateParser = new SimpleDateFormat(DATE_FORMAT);
//feed是通過SyndFeedImpl的實例
SyndFeed feed = new SyndFeedImpl();
feed.setFeedType(feedType);
feed.setTitle(gen.getName());
feed.setLink(gen.getLink());
feed.setDescription(gen.getDescription());
//SyndImage image=feed.getImage();
SyndImage image = new SyndImageImpl();
if(image!=null) {
//image.setLink(gen.getImagelink());
image.setUrl(gen.getImagelink());
image.setDescription(gen.getImagedes());
image.setTitle(gen.getImagetitle());
}
feed.setImage(image);
//entries就是item集合
List<SyndEntry> entries = new ArrayList<SyndEntry>();
//一個entry就是一個item
SyndEntry entry=null;
SyndContent description;

//第一個item
InfoPro program=null;
for(int i=0;i<pro.size();i++){
program=(InfoPro)pro.get(i);
entry = new SyndEntryImpl();
entry.setTitle(program.getTitle());
entry.setLink(program.getLink());
entry.setPublishedDate(dateParser.parse(program.getPublishtime()));
description = new SyndContentImpl();
description.setType("text/plain");
description.setValue(program.getDescription());
entry.setDescription(description);
entries.add(entry);
}

//將entries加入channel
feed.setEntries(entries);
File f=new File(value+"//"+genreid);
if(!f.exists()) f.mkdirs();
Writer writer = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
SyndFeedOutput output = new SyndFeedOutput();

//更新客戶對應欄目表isupdate字段,提示更新
if(gen.getIsupdate().equals("1")){
boolean flag=updateCusGenre(gen.getId());
}
boolean flag1=updateGenre(gen.getId());
//存盤,形成靜態rss
output.output(feed,writer);
writer.close();

//存盤,形成靜態html
Transform trans=new Transform();
trans.transForm(genreid, fileName, xslpath);

}
catch (Exception ex) {
ex.printStackTrace();
System.out.println("ERROR: "+ex.getMessage());
}
}
[/code]

rss+xslt轉換html輸出

[code]
public void transForm(String genreid,String rssPath,String xslPath){
try {
//取得xml和xsl流
StreamSource source = new StreamSource(rssPath);
StreamSource style = new StreamSource(xslPath+"//template.xsl");

//設置輸出流,把生成的結果傳送到輸出流中。構造函數中的輸出流也可以是其他形式。
String value = "";
Properties prop = new Properties();
String url=this.getClass().getResource("/rss.properties").getPath().trim();
url=url.replaceAll("%20"," ");
InputStream fis = new FileInputStream(url);
prop.load(fis);
value = prop.getProperty("address");
String fileName = value+"//"+genreid+"//"+genreid+".html";//靜態h存放目錄
Writer outfile = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
StreamResult result = new StreamResult(outfile);

//初始化轉換器
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer(style);

//設置生成html形式結果流的編碼爲GBK
transformer.setOutputProperty(OutputKeys.ENCODING,"GBK");

//設置html形式的流是有縮進格式的
transformer.setOutputProperty(OutputKeys.INDENT,"yes");

//轉換並且輸出流
transformer.transform(source,result);

}catch(Exception e) {
e.printStackTrace();
}
}

[/code]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章