Java实现Web版RSS阅读器(一)dom4j读取xml(opml)文件
当前位置:以往代写 > JAVA 教程 >Java实现Web版RSS阅读器(一)dom4j读取xml(opml)文件
2019-06-14

Java实现Web版RSS阅读器(一)dom4j读取xml(opml)文件

副标题#e#

打仗java不久,偶有收获,最近想做一个web版RSS阅读器来熬炼一下。手头有几个从差异版本的foxmail中导出的opml文件,各人应该都知道,opml文件就是xml名目标。那么就先从这里入手,操练一下利用dom4j读取xml文件。

在java措施设计中,尤其是java web开拓措施,xml应用频率超高。Spring、Hibernate、Struts等各类web 框架,MyEclipse、Oracle等IDE,也都主要依托xml。可以说xml对付系统的设置,有着至关重要的浸染。而这些也同时加强了系统的机动性。

先说一下思路:

新建一个java web项目,不外临时没有利用jsp,servlet。本文只是利用自带的调试器,先举办测试读取xml。接下来的博文中,会带各人一起显示在已经优化的界面中,并提供大部门的rss阅读器的成果。

由于从差异版本的foxmail中导出,文件名目稍有差异,主要分歧是在订阅分构成果上。有的版本导出来的分组信息是在head/title内容中,body/outline则放的是全部的订阅信息;有的导出来的分组信息则是在body/outline中title和text属性中,而具体的订阅信息则放在body/outline/outline中。

我想做的系统可以支持读取多个opml文件,所以需要一个rss文件列表设置文件【rss_config.xml】,对应一个实体:RssConfigBean.java,主要包括有opml文件路径信息;分组信息也需要单独出来,定名为【RssTeamBean.java】,包罗title和text两个属性和一个订阅信息的列表。订阅信息必定也是独立的,定名为【RssBean.java】,包罗text、title、xmlUrl、htmlUrl、version、type六个属性。

首先通过读取rss_config.xml,拿到所有opml文件路径,然后轮回读取opml,拿到分组信息及每个分组下的所有具体订阅信息,生存到实体中,以供挪用显示。

光说不管用,直接上代码:

①. opml文件

【单分组foxmail6.5.opml】

<?xml version="1.0"?>  
<opml version="1.1">  
    <head>  
        <title>六期新博客地点</title>  
    </head>  
    <body>  
        <outline text="丁成云" title="丁成云" type="rss" version="RSS" xmlUrl="http://blog.csdn.net/sundenskyqq/rss/list" htmlUrl="http://blog.csdn.net/sundenskyqq" description="" />  
        <outline text="韩正阳" title="韩正阳" type="rss" version="RSS" xmlUrl="http://blog.csdn.net/jiudihanbing/rss/list" htmlUrl="http://blog.csdn.net/jiudihanbing" description="" />  
              
    </body>  
</opml>

【多分组foxmail7.opml】

<?xml version="1.0" encoding="UTF-8"?>  
<opml version="1.0">  
    <head>  
        <title>Subscription in Foxmail</title>  
    </head>  
    <body>  
        <outline title="八期" text="八期">  
            <outline htmlUrl="http://blog.csdn.net/shan9liang" xmlUrl="http://blog.csdn.net/shan9liang/rss/list" version="RSS" type="rss" title="贾琳" text="贾琳的专栏" />             
        </outline>  
        <outline title="随便看看" text="随便看看">  
            <outline htmlUrl="http://blog.csdn.net/blogdevteam" xmlUrl="http://blog.csdn.net/blogdevteam/rss/list" version="RSS" type="rss" title="CSDN 官方博客" text="CSDN 官方博客" />  
            <outline htmlUrl="http://blog.csdn.net/zhoufoxcn" xmlUrl="http://blog.csdn.net/zhoufoxcn/rss/list" version="RSS" type="rss" title="周公的专栏" text="周公的专栏" />  
              
        </outline>  
        <outline title="提高班" text="提高班">  
            <outline htmlUrl="http://sxyandapp.blog.163.com" xmlUrl="http://sxyandapp.blog.163.com/rss" version="RSS" type="rss" title="石小永" text="石小永" />  
            <outline htmlUrl="http://blog.csdn.net/qiulongtianshi" xmlUrl="http://blog.csdn.net/qiulongtianshi/rss/list" version="RSS" type="rss" title="郭校林" text="郭校林" />  
        </outline>  
    </body>  
</opml>


#p#副标题#e#

②. 在src中新建rss文件列表设置文件

【rss_config.xml】

<?xml version="1.0" encoding="UTF-8"?>  
<rss>  
    <rss-list>  
        <rss-name>单分组foxmail6.5</rss-name>  
        <rss-path>\rss\单分组foxmail6.5.opml</rss-path>  
    </rss-list>  
    <rss-list>  
        <rss-name>多分组foxmail7</rss-name>  
        <rss-path>\rss\多分组foxmail7.opml</rss-path>  
    </rss-list>  
</rss>

③. 新建包com.tgb.rssreader.bean,添加3个java文件:

#p#分页标题#e#

【RssBean.java】具体订阅信息

package com.tgb.rssreader.bean;  
      
/** 
 * 具体订阅信息 
 * @author Longxuan 
 * 
 */
public class RssBean {  
          
    /** 
     * 显示名称 
	 *

【RssConfigBean.java】 rss设置信息

package com.tgb.rssreader.bean;  
      
/** 
 * rss设置信息 
 * @author Longxuan 
 * 
 */
public class RssConfigBean {  
      
    /** 
     * 分组名称 
     */
    private String name;  
          
    /** 
     * 路径 
     */
    private String path;  
          
    public String getPath() {  
        return path;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public void setPath(String path) {  
        this.path = path;  
    }  
          
}

【RssTeamBean.java】rss分组信息

package com.tgb.rssreader.bean;  
      
import java.util.List;  
      
/** 
 * rss分组信息 
 * @author Longxuan 
 * 
 */
public class RssTeamBean {  
      
    /** 
     * 分组标题 
     */
    private String title;  
          
    /** 
     * 分组名称 
     */
    private String text;  
          
    private List<RssBean> rssBeanList ;  
          
    public String getTitle() {  
        return title;  
    }  
    public void setTitle(String title) {  
        this.title = title;  
    }  
    public String getText() {  
        return text;  
    }  
    public void setText(String text) {  
        this.text = text;  
    }  
    public List<RssBean> getRssBeanList() {  
        return rssBeanList;  
    }  
    public void setRssBeanList(List<RssBean> rssBeanList) {  
        this.rssBeanList = rssBeanList;  
    }  
          
}

#p#副标题#e#

④. 新建包com.tgb.rssreader.manager,添加2个文件:

【RssConfigMgr.java】rss文件列表设置打点器

package com.tgb.rssreader.manager;  
      
import java.io.InputStream;  
import java.util.ArrayList;  
import java.util.Iterator;  
import java.util.List;  
      
import org.dom4j.Document;  
import org.dom4j.DocumentException;  
import org.dom4j.Element;  
import org.dom4j.io.SAXReader;  
      
import com.tgb.rssreader.bean.RssConfigBean;  
      
/** 
 * rss文件列表设置打点器 
 * @author Longxuan 
 * 
 */
public class RssConfigMgr {  
      
    /** 
     * 读取rss文件列表设置信息 
     * @return 
     */
    public List<RssConfigBean> getRssConfig() {  
        List<RssConfigBean> list = new ArrayList<RssConfigBean>();  
        RssConfigBean rssConfigBean = null;  
        InputStream is = Thread.currentThread().getContextClassLoader()  
                .getResourceAsStream("rss_config.xml");  
      
        if (is == null) {  
            //System.out.println("找不到该文件");  
            //return null;  
            throw new RuntimeException("找不到rss_config.xml文件");  
        }  
      
        try {  
            // 读取并理会XML文档  
            // SAXReader就是一个管道,用一个流的方法,把xml文件读出来  
            SAXReader reader = new SAXReader();   
                  
            // 下面的是通过理会xml字符串的  
            Document doc = reader.read(is);  
            Element rootElt = doc.getRootElement(); // 获取根节点  
            //System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称  
      
            Iterator<?> iter = rootElt.elementIterator("rss-list"); // 获取根节点下的子节点rss-list  
      
            // 遍历rss-list节点  
            while (iter.hasNext()) {  
      
                Element recordEle = (Element) iter.next();  
                String name = recordEle.elementTextTrim("rss-name"); // 拿到rss-list节点下的子节点name值  
                //System.out.println("name:" + name);  
      
                String path = recordEle.elementTextTrim("rss-path"); // 拿到rss-list节点下的子节点path值  
                //System.out.println("path:" + path);  
                rssConfigBean = new RssConfigBean();  
                //生存到rssConfigBean中  
                rssConfigBean.setName(name);  
                rssConfigBean.setPath(path);  
                      
                //生存到list中  
                list.add(rssConfigBean);  
            }  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        }  
      
        return list;  
    }  
      
}

#p#副标题#e#

#p#分页标题#e#

【ReadXML.java】读取xml文件

package com.tgb.rssreader.manager;  

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.tgb.rssreader.bean.RssBean;
import com.tgb.rssreader.bean.RssConfigBean;
import com.tgb.rssreader.bean.RssTeamBean;

/**
* 读取xml文件
* @author Longxuan
*
*/
public class ReadXML {

// rss分组订阅列表
private List<RssTeamBean> rssTeamBeanList = new ArrayList<RssTeamBean>();

/**
* 读取rss文件列表
*/
public void ReadRss() {

// rss文件列表设置信息实体
//

由于没有利用jsp举办显示,所以要想看结果,直接右键main函数,选择“Run As”-》“1 Java Application” ,举办测试。这里给出结果图:

Java实现Web版RSS阅读器(一)dom4j读取xml(opml)文件

已经可以完全读取了。岂论是单组旧版的,照旧多分组新版导出来的opml文件,都可以正常读取。接下来的博文中,会写怎么把功效读取到jsp,会利用树布局来显示。后续版本会加上添加,删除,修改,移动订阅信息及复制订阅信息到组。同时也提供导入,导出成果。这些城市呈此刻后续博客中。尽请等候。

    关键字:

在线提交作业