码迷,mamicode.com
首页 > 其他好文 > 详细

sax解析xml

时间:2015-09-28 20:46:28      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

MyHandler.java

package com.sax.handler;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyHandler extends DefaultHandler {
    
    private HashMap<String,String> map=null; //存储单个解析的完整对象
    private List<HashMap<String,String>> list=null;  //存储所有解析对象
    private String currentTag=null; //正在解析的元素标签
    private String currentValue=null; //解析的当前元素值
    private String nodeName=null; //解当前的节点名称
    

    public List<HashMap<String, String>> getList() {
        return list;
    }

    
    public MyHandler(String nodeName) {
        this.nodeName=nodeName;
    }
    @Override
    public void startDocument() throws SAXException {
        //读到第一个标签,触发这个方法
        list=new ArrayList<HashMap<String,String>>();
    }
    
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        //读到文档开头,触发这个方法
        if(qName.equals(nodeName))
        {
        map=new HashMap<String,String>();    
        }
        if(attributes!=null&&map!=null)
        {
            for(int i=0;i<attributes.getLength();i++)
            {
                map.put(attributes.getQName(i),attributes.getValue(i));
            }
        }
        currentTag=qName;
    }
    
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // 这个方法是处理读取到xml文件的内容 
        if(currentTag!=null && map!=null)
        {
            currentValue=new String(ch, start, length);
            if(currentValue!=null&& !currentValue.trim().equals("") && !currentValue.equals("\n"));
            map.put(currentTag,currentValue);
        }
        currentTag=null; //把当前节点对应的值和标签设置为空
        currentValue=null;
    }
    
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        // 遇到结束标记的时候,会调用这个方法
        if(qName.equals(nodeName))
        {
            list.add(map);
            map=null;
        }
    }

}

SaxServers.java

package com.sax.handler;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

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

public class SaxServers {

    public SaxServers() {
        // TODO Auto-generated constructor stub
    }
    
    public static List<HashMap<String,String>> readXml(InputStream inputStream,String nodeName)
    {
        List<HashMap<String,String>> list=null;
        try {
            
            //创建一个解析XML的工厂对象
            SAXParserFactory spf=SAXParserFactory.newInstance();
            SAXParser parser=spf.newSAXParser();//解析XML
            MyHandler handler=new MyHandler(nodeName);
            parser.parse(inputStream,handler);
            inputStream.close();
            return handler.getList();
        } catch (Exception e) {
            // TODO: handle exception
            return list; 
        }
    
    }

}

HttpUtils.java

package com.sax.handler;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtils {

    public HttpUtils() {
        // TODO Auto-generated constructor stub
    }
    
    public static InputStream getXML(String path)
    {
        InputStream inputStream=null;
        try {
            URL url=new URL(path);
            if(url!=null)
            {
                HttpURLConnection connection=(HttpURLConnection)url.openConnection();
                connection.setConnectTimeout(3000);
                connection.setDoInput(true);
                connection.setRequestMethod("GET");
                int code=connection.getResponseCode();
                if(code==200)
                {
                    inputStream=connection.getInputStream();
                }
                
            }
        } catch (Exception e) {
            // TODO: handle exception
        }
        return inputStream;
        
    }

}

Text.java

package com.sax.handler;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

public class Text {

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

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String path="http://weikew.gotoip55.com/person.xml";
        InputStream inputstream=HttpUtils.getXML(path);
        try {
            List<HashMap<String,String>> list=SaxServers.readXml(inputstream, "person");
            for(HashMap<String,String> map:list)
            {
                System.out.println(map.toString());
            }
        } catch (Exception e) {
            // TODO: handle exception
        }

    }

}

 

sax解析xml

标签:

原文地址:http://www.cnblogs.com/zywf/p/4844716.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!