Rss-web開(kāi)始了,今天我的工作就是做對Rss文件的分析,想起前幾天剛剛試用了一下的 dom4j,今天就拿他來(lái)分析xml了.用的的確很方便!頂一個(gè)!
由于我只需要從xml中讀取必要的信息,所以寫(xiě)的代碼不具有通用性,不過(guò)對大多數基本應用,這個(gè)類(lèi)應該夠用了!先貼代碼和運行結果:
package org.ibmclub.hust.Rss;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.ibmclub.hust.Rss.bean.Item;
public class RssFile {
private Document doc;
private String channelName;
private String channelLink;
private String channelDes;
private ArrayList<Item> items = new ArrayList<Item>();
public RssFile(File f) {
parseFile(f);
}
private void parseFile(File f) {
try {
SAXReader reader = new SAXReader();
doc = reader.read(f);
List l = doc.selectNodes("rss/channel");
if (l.size() == 0) {
throw new Exception("not a good rss-xml file");
}
Node channel = (Node) l.get(0);
channelName = ((Element) channel.selectNodes("title").get(0))
.getText();
channelLink = ((Element) channel.selectNodes("link").get(0))
.getText();
channelDes = ((Element) channel.selectNodes("description").get(0))
.getText();
//封裝item信息
List itemList = channel.selectNodes("item");
for(Object item : itemList){
Item i = new Item((Node)item);
items.add(i);
}
//查看輸出
System.out.println("channelName:" + channelName);
System.out.println("channelLink:" + channelLink);
System.out.println("channeDes:" + channelDes);
for(Item i : items){
System.out.println(" title:"+i.getTitle());
// System.out.println(" link:"+i.getLink());
// System.out.println(" pubtime:"+i.getPubTime());
// System.out.println(" des:"+i.getDes());
}
} catch (Exception e) {
System.out.println("message:"+e.getMessage());
}
}
public String getChannelName() {
return channelName;
}
public String getChannelLink() {
return channelLink;
}
public String getDescription() {
return channelDes;
}
public ArrayList<Item> getItems() {
return items;
}
public static void main(String[] args) {
long start = System.currentTimeMillis();
RssFile rssfile = new RssFile(new File("c://Rss.xml"));
System.out.println(System.currentTimeMillis() - start);
}
}
package org.ibmclub.hust.Rss.bean;
import java.sql.Timestamp;
import org.dom4j.Element;
import org.dom4j.Node;
public class Item {
private String title;
private String link;
private String des;
private String pubTime;
public Item() {
}
public Item(Node itemNode) {
title = ((Element) itemNode.selectNodes("title").get(0)).getText();
link = ((Element) itemNode.selectNodes("link").get(0)).getText();
des = ((Element) itemNode.selectNodes("description").get(0)).getText();
pubTime = ((Element) itemNode.selectNodes("pubDate").get(0)).getText();
}
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 getPubTime() {
return pubTime;
}
public void setPubTime(String pubTime) {
this.pubTime = pubTime;
}
public String getDes(){
return des ;
}
public void setDes(String des){
this.des = des ;
}
}
運行結果:
channelName:CQ的專(zhuān)欄
channelLink:http://blog.csdn.net/cq8587/
channeDes:
title:今天上課了
title:拓撲排序
title:俄羅斯農夫算法
title:影評:雨天的水彩畫(huà) 《愛(ài)有天意》觀(guān)感(轉)
title:java處理壓縮文件
title:第一篇文章
532
用的時(shí)間還真不少 532ms,不過(guò)寫(xiě)起代碼來(lái)還真是簡(jiǎn)單方便,魚(yú)和熊掌不可兼得!
聯(lián)系客服