通过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;
        }

}


使用XMLReader接口解析XML-个人记录

如何获取XMLReader接口从JDK文档来看,有两种方法:使用SAXParserFactory+SAXParser[以下简称a方法]XMLReader aaa=SAXParserFactory.ne...
  • Listener_ri
  • Listener_ri
  • 2015年05月12日 13:17
  • 1841

XmlReader 读取器读取内存流 MemoryStream 的注意事项

MemoryStream对象提供了无需进行IO就可以创建Stream的方法,XmlTextWriter和XmlReader提供快速书写和读取XML内容的方法,结合MemoryStream,就可以直接在...
  • net_lover
  • net_lover
  • 2006年12月02日 15:41
  • 6121

XML通过HTTP请求从服务器端获取XML数据

通过浏览器可以发送HTTP请求,从服务器端获取XML数据:看例子吧,没什么好说的。function search(){var parser=new ActiveXObject("microsoft.x...
  • ahpo
  • ahpo
  • 2006年03月20日 16:03
  • 1169

c#语言用XmlReader解析超大XML文件

用XmlReader解析xml文件不用提前将内容加载到内存,而是逐行读取,减少内存占用,其高效率,能够有效读取超大xml文件。废话少说,直接上代码! xml文件格式样例: ...
  • xianyucishi
  • xianyucishi
  • 2018年01月09日 13:07
  • 56

XmlReader怎么读取指定节点的内容??(问-答)

 C# code XmlDocument doc = new XmlDocument(); doc.Load("xxx.xml"); XmlNodeList nodeLis...
  • QQ1449301756
  • QQ1449301756
  • 2014年08月14日 23:10
  • 556

C#中 XML 读写文件的方法(xmlreader,xmlwriter)

C#中xml读写文件的方法(xmlreader,xmlwriter)   using System;//写入 using System.Collections.Generic; ...
  • niuduwhw
  • niuduwhw
  • 2013年03月11日 11:44
  • 2040

如何正确运用PHP XMLReader解析XML文档

我们在运用PHP语言进行实际编程中,经常会遇到需要对XML文档进行解析的需求。在PHP语言中提供了许多函数可以满足这一需求的实现。。其中PHP XMLReader循序地浏览过xml档案的节点,可以想像...
  • bjash
  • bjash
  • 2013年03月26日 14:54
  • 1210

XML文件的读取用XmlDocument和XmlReader的比较

 XmlReader是基于数据流的,占用极少的内存,是只读方式的,所以速度极快.只能采用遍历的模式查找数据节点。 XmlTextReader textReader = new XmlTextReade...
  • lulu831110
  • lulu831110
  • 2009年11月10日 10:00
  • 6496

在asp.net中读取xml文件信息的4种方法

方法一 :使用xml控件       读取xml方法一        方法二: 使用dom技术      void page_load(object sender,eventargs e) {   x...
  • nnsword
  • nnsword
  • 2007年10月29日 13:08
  • 559

【JAVA】java:使用XMLReaderFactory类和XMLReader类解析XML文档

java:使用SAXParserFactory类和SAXParser类解析XML文档  java:使用JDOM解析XML文档       .java:使用XMLReaderFactory类...
  • kenkywu
  • kenkywu
  • 2012年02月16日 17:12
  • 2846
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过XMLReader 读取服务器的xml 文件(通过sax2)
举报原因:
原因补充:

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