XML解析---SAX

SAX解析

1、编写SaxHelper 继承 DefaultHandler @H_502_4@ 1)创建目标类 @H_502_4@ 2)创建ArrayList,用来存放解析结果; @H_502_4@ 3)复写startDocument() 当SAX解析器解析到XML文档开始时,会调用方法 @H_502_4@ 4)复写endDocument() 当SAX解析器解析到XML文档结束时,会调用方法 @H_502_4@ 5)复写characters() 当SAX解析器解析到某个元素开始时,会调用方法 其中localName记录的是元素属性名 @H_502_4@ 6)复写endElement()当SAX解析器解析到某个元素结束时,会调用方法 其中localName记录的是元素属性

2、编写sax() @H_502_4@ 1)创建ArrayList,用来存放解析结果; @H_502_4@ 2)把xml文件转化为InputSource格式; @H_502_4@ 3)通过SAXParserFactory.newInstance() 获取factory; @H_502_4@ 4)通过factory获得saxParser; @H_502_4@ 5)通过saxParser.getXMLReader() 获得xml阅读器; @H_502_4@ 6)设置 阅读器 handler xmlReader.setContentHandler; @H_502_4@ 7)设置 阅读器的InputSource

## BOOK类 ##
package com.example.xmltest;

import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.xml.sax.EntityResolver;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException
public class Book {

    private String id;
    private String name;
    private String prize;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrize() {
        return prize;
    }
    public void setPrize(String prize) {
        this.prize = prize;
    }
    public String toString()
    {
        return this.id + this.name + this.prize ;
    }



}

待读取xml

<?xml version="1.0" encoding="utf-8"?>  
<books>  
    <book auther="a">  
        <id>1001</id>  
        <name>Thinking In Java</name>  
        <price>80.00</price>  
    </book>  
    <book auther="b">  
        <id>1002</id>  
        <name>Core Java</name>  
        <price>90.00</price>  
    </book>  
    <book auther="c">  
        <id>1003</id>  
        <name>Hello,Andriod</name>  
        <price>100.00</price>  
    </book>  
</books>

SAXHelper

package com.example.xmltest;

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

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

public class SaxHelper extends DefaultHandler{

    private int currentstate = 0;
    final int id = 1;
    final int name = 2;
    final int price = 3;
    Book book;
    List<Book> books;

    public List getbooks()
    {
        return books;
    }

    @Override
    public void characters(char[] ch,int start,int length)
            throws SAXException {
        // Todo Auto-generated method stub
        String str = new String(ch);
        switch (currentstate) {
        case id:
             book.setId(str);
             currentstate = 0;

            break;
        case name:
             book.setName(str);
             currentstate = 0;

            break;
        case price:
             book.setPrize(str);
             currentstate = 0;

            break;

        default:
            break;
        }

        super.characters(ch,start,length);
    }

    @Override
    public void endDocument() throws SAXException {
        // Todo Auto-generated method stub
        super.endDocument();
    }

    @Override
    public void endElement(String uri,String localName,String qName)
            throws SAXException {
        // Todo Auto-generated method stub

        if(localName.equals("book"))
        {
            books.add(book);
        }
        super.endElement(uri,localName,qName);
    }

    @Override
    public void startDocument() throws SAXException {
        // Todo Auto-generated method stub
        books = new ArrayList<Book>();
        book = new Book();
        super.startDocument();
    }

    @Override
    public void startElement(String uri,String qName,Attributes attributes) throws SAXException {
        if (localName.equals("books"))
        {
            currentstate = 0;
            return;
        }
        if (localName.equals("book"))
        {
            book = new Book();
            return;
        }
        if (localName.equals("id"))
        {
            currentstate = id;
            return;
        }
        if (localName.equals("name"))
        {
            currentstate = name;
            return;
        }
        if (localName.equals("price"))
        {
            currentstate = price;
            return;
        }

        // Todo Auto-generated method stub



        super.startElement(uri,qName,attributes);
    }




}

sax()

private void sax(InputSource inputstream)throws Exception{
        SAXParserFactory factory = SAXParserFactory.newInstance();
        List<Book> books = new ArrayList<Book>();
        try {
            SAXParser  saxparser = factory.newSAXParser();
            //获得阅读器
            XMLReader xmlreader = saxparser.getXMLReader();
            SaxHelper saxh =  new SaxHelper();
            xmlreader.setContentHandler(saxh);
            xmlreader.parse(inputstream);
            //返回数据
            books = saxh.getbooks();
        } catch (ParserConfigurationException e) {
            // Todo Auto-generated catch block
            e.printstacktrace();
        } catch (SAXException e) {
            // Todo Auto-generated catch block
            e.printstacktrace();
        }

        for(Book book:books)
        {
            System.out.println(book.toString());
        }
    }

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念