通过XMLReader 读取服务器的xml 文件(通过sax2)

原创 2011年12月01日 18:52:18

本文通过参考http://www.iteye.com/topic/763895 网站

通过读本地磁盘取得xml 可以参考  http://www.iteye.com/topic/763895网站       InputStream input = new FileInputStream(new File("D:\\test\\test.xml"));

有三类:TestRssTesteSax2.java| SaxRssTestService.java|RssItemDTO.java

第一类:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class TestRssTesteSax2 {

    public TestRssTesteSax2() {
        // TODO Auto-generated constructor stub
    }

    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        String Url = "http://blog.hiredmyway.com/feed";// Url 就是读这个网站的信息
        SaxRssTestService sax = new SaxRssTestService();
        
         try {
                
                URL u = new URL(Url);
                URLConnection UC = u.openConnection();
                /*
                 * If we don't set the user-agent property sites like Google won't
                 * let you access their feeds.
                 */
                UC.setRequestProperty("User-agent", "www.hiredmyway.com");
                InputStreamReader r = new InputStreamReader(UC.getInputStream());
                
                List<RssItemDTO> blogs = sax.getBlogs(r);
                for(RssItemDTO dto : blogs){
                    System.out.println(dto.toString());
                    System.out.println("-------------------------------");
                }

                System.out.println("count="+blogs.size());
            } catch (Exception e) {
                
            }
        

    }

}
-----------------------------------------------------------------

第二类


import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;



public class SaxRssTestService extends DefaultHandler{


    private List<RssItemDTO> blogs = null;
    private RssItemDTO blog = null;

    private String preTag = null;//作用是记录解析时的上一个节点名称

    public List<RssItemDTO> getBlogs(InputStreamReader xmlStream) throws Exception{
        SAXParserFactory factory = SAXParserFactory.newInstance();
//        SAXParser parser = factory.newSAXParser();
        SaxRssTestService handler = new SaxRssTestService();
        XMLReader xr = XMLReaderFactory.createXMLReader();
        xr.setContentHandler(handler);
        xr.setErrorHandler(handler);
//        xr.parse(xmlStream, handler);
        xr.parse(new InputSource(xmlStream));
        return handler.getBlogs();
    }
    
    public List<RssItemDTO> getBlogs() {
        return blogs;
    }

    public void setBlogs(List<RssItemDTO> blogs) {
        this.blogs = blogs;
    }
    
    @Override
    public void startDocument() throws SAXException {
        blogs = new ArrayList<RssItemDTO>();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if("item".equals(qName)){
            blog = new RssItemDTO();
//            blog.setId(Integer.valueOf(attributes.getValue(0)));
        }
        preTag = qName;//将正在解析的节点名称赋给preTag 

    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        if("item".equals(qName)){
            blogs.add(blog);
            blog = null;
        }
        preTag = null;
    }
    
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        
        if (blog !=null) {
            if(preTag!=null){
                String content = "";
                for (int i = start; i < start + length; i++) {
                    content += ch[i];
                }
            
                if("title".equals(preTag)){
                    blog.setTitle(content);
                }else if("pubDate".equals(preTag)){
                    blog.setPubDate(content);
                }else if ("link".equals(preTag)) {
                    //description
                    blog.setURL(content);
                } else if ("description".equals(preTag)){
                    if (content !=null && !content.equals("\n")) {
                        blog.setDescription(content);
                    }
                    
                } else if ("content:encoded".equals(preTag)) {
                    if (content !=null && !content.equals("\n")) {
                        blog.setImageUrl(content);
                    }
                    
                }
            }
        }

    }
    
}

====================================

第三个类:

package com.hiredmyway.index.sax2test;

import org.apache.commons.lang.StringUtils;

import com.hiredmyway.util.string.ShortTextSubString;
import com.hiredmyway.util.string.TitleSubString;

public class RssItemDTO {    
        private String Title = "";
        private String URL = "";        
        private String description="";
        private String pubDate="";
        private String imageUrl = "";
        private int id;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getDescription() {
            if(StringUtils.isNotBlank(description)){
                description = new ShortTextSubString().trimSubString(description);
            }
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
        public void setTitle(String Title) {
            if(StringUtils.isNotBlank(this.Title)){
                this.Title = new TitleSubString().trimSubString(this.Title);
            }
            this.Title = Title;
        }        
        public void setURL(String URL) {
            this.URL = URL;
        }
        
        public String toString() {            
            return this.Title+":"+this.pubDate+":"+this.URL+":"+this.description+":"+this.getImageUrl();
        }
        public String getTitle() {
            return Title;
        }
        public String getURL() {
            return URL;
        }
        public String getPubDate() {
            return pubDate;
        }
        public void setPubDate(String pubDate) {
            this.pubDate = pubDate;
        }
        
        public String getImageUrl() {
            return imageUrl;
        }
        public void setImageUrl(String imageUrl) {
            this.imageUrl = imageUrl;
        }

}


相关文章推荐

android SAX 解析Xml 文件

终效果图 代码结构图: 代码详解: main.xml [xhtml:collapse] + expand sourceview plaincopy beaut...

SAX 解析 xml 文件

如何定义一个 xml文件? 结构简单,

SAX 解析 XML 文件详细解剖及案例

就目前来说,有三种方式可以解析XML文件:DOM、SAX、StAX。DOM将整个XML文件加载到内存中,并构建出节点树;应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点、属性等信息;这种方...

JAVA 读取 制定路径的 XML 文件 和 获取 服务器路径

/** * 读取所有地区(全部为中文名) * * @return */ public static List getAreaList() { List result = new...

XML 文件解析    SAX解析    DOM 解析

//************ dom 解析 ****************************** #pragma mark -- dom 解析 使用之前先配置 // DOM...

SAX2方法读取XML文件

  • 2017年11月02日 08:56
  • 6.89MB
  • 下载

XMLReader—一个可以读取XML文件的java类

在我的博文java ArrayList代替数组中有个XMLReader类,这是一个可以读取XML文件的java类,它的实现过程是怎样的呢?接下来让我们看看XMLReader的实现过程: 首先你要下载...

利用 Qt 读取 XML 文件的方法

XML 是可扩展标记语言(Extensible Markup Language)的缩写。XML 文件由内容和标记组成,通过以标记包围内容的方式将大部分内容包含在元素中。 Qt 中提供了多种读取XML文...

Delphi 中的 XMLDocument 类详解(3) - 读取 xml 文件

先虚拟一个测试文件: test.xml; 放在 c:\temp\ 下备用. <?xml version="1.0" encoding="gb2312"?> <科室名单 备注="测试"...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过XMLReader 读取服务器的xml 文件(通过sax2)
举报原因:
原因补充:

(最多只允许输入30个字)