首页 > 代码库 > SAX解析XML-例子

SAX解析XML-例子

1.要解析的xml

<?xml version="1.0" encoding="UTF-8"?>
<employees>
    <employee id="001">
        <name>cici</name>
        <department>finace</department>
        <supervisor>lily</supervisor>
    </employee>
    <employee id="002">
        <name>alex</name>
        <department>develope</department>
        <supervisor>lily</supervisor>
    </employee>
</employees>

2.继承DefaultHandler的子类EmployeeHandler.java,重写方法

技术分享
package sax;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Map;

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

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class SaxXMLTest {
    public static void main(String[] args) throws SAXException, ParserConfigurationException, IOException{
        readXMLBySaxParser();
        readXMLByXMLReader();
    }

    private static void readXMLBySaxParser() throws ParserConfigurationException,
            SAXException, IOException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        
        EmployeeHandler handler = new EmployeeHandler("employee");
        parser.parse("src\\sax\\employees.xml", handler);
        List<Map<String, String>> employees = handler.getEmployees();
        System.out.println(employees.toString());
    }

    private static void readXMLByXMLReader() throws SAXException,
            SAXNotRecognizedException, SAXNotSupportedException, FileNotFoundException, IOException {
        XMLReader reader = XMLReaderFactory.createXMLReader();
        //打开解析器验证的功能
        reader.setFeature("http://xml.org/sax/features/validation",true);
        //开启明明空间特性
        reader.setFeature("http://xml.org/sax/features/namespaces",true); 
        EmployeeHandler handler = new EmployeeHandler("employee"); 
        reader.setContentHandler(handler);
        reader.parse(new InputSource(new BufferedInputStream(new FileInputStream("src\\sax\\employees.xml"))));
    }
}
View Code

3.测试类 SaxXMLTest.java,用SAXParser和XMLReader两种方式解析

技术分享
package sax;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.Map;

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

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

public class SaxXMLTest {
    public static void main(String[] args) throws SAXException, ParserConfigurationException, IOException{
        readXMLByHandler();
        readXMLByXMLReader();
    }

    private static void readXMLByHandler() throws ParserConfigurationException,
            SAXException, IOException {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        
        EmployeeHandler handler = new EmployeeHandler("employee");
        parser.parse("src\\sax\\employees.xml", handler);
        List<Map<String, String>> employees = handler.getEmployees();
        System.out.println(employees.toString());
    }

    private static void readXMLByXMLReader() throws SAXException,
            SAXNotRecognizedException, SAXNotSupportedException, FileNotFoundException, IOException {
        XMLReader reader = XMLReaderFactory.createXMLReader();
        //打开解析器验证的功能
        reader.setFeature("http://xml.org/sax/features/validation",true);
        //开启明明空间特性
        reader.setFeature("http://xml.org/sax/features/namespaces",true); 
        EmployeeHandler handler = new EmployeeHandler("employee"); 
        reader.setContentHandler(handler);
        reader.parse(new InputSource(new BufferedInputStream(new FileInputStream("src\\sax\\employees.xml"))));
    }
}
View Code

 

SAX解析XML-例子