`
y8820960
  • 浏览: 112788 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SAX解析XML实例

    博客分类:
  • XML
 
阅读更多
student.xml:
<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student>
		<name>Stone</name>
		<age>26</age>
		<sex>男</sex>
		<address>北京</address>
	</student>
	<student>
		<name>Snow</name>
		<age>24</age>
		<sex>女</sex>
		<address>北京</address>
	</student>
</students>

解析器:
package com.xml;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Stack;

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

@SuppressWarnings("unchecked")
public class SAXForXML extends DefaultHandler
{
    private Stack tags = new Stack();
    
    private Map contents = new LinkedHashMap();
    
    public int count = 0;
    
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException
    {
        // TODO Auto-generated method stub
        String tag = (String)tags.peek();
        if ("name".equals(tag))
        {
            String name = new String(ch, start, length);
            contents.put("name" + count, name);
        }
        if ("sex".equals(tag))
        {
            String sex = new String(ch, start, length);
            contents.put("sex" + count, sex);
        }
        if ("age".equals(tag))
        {
            String age = new String(ch, start, length);
            contents.put("age" + count, age);
        }
    }
    
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException
    {
        // TODO Auto-generated method stub
        if ("student".equals(qName))
        {
            count++;
        }
        tags.push(qName);
    }
    
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException
    {
        // TODO Auto-generated method stub
        tags.pop();
    }
    
    public Map getContents()
    {
        return contents;
    }
}

测试类:
package com.xml;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

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

import org.xml.sax.SAXException;

public class Test
{
    public static void main(String[] args)
    {
        SAXForXML saxForXML = new SAXForXML();
        try
        {
            SAXParserFactory saxFactory = SAXParserFactory.newInstance();
            SAXParser sp = saxFactory.newSAXParser();
            sp.parse(new File("src/student.xml"), saxForXML);
            Map contents = saxForXML.getContents();
            Iterator keys = contents.keySet().iterator();
            while(keys.hasNext()) {
                String key = (String)keys.next();
                System.out.println(key + ":" + contents.get(key));
            }
        }
        catch (ParserConfigurationException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (SAXException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics