winfwu

导航

SAX解析----详解

(1)什么是SAX解析

    SAX解析器是对XML文档解析会从XML文档开始位置起进行解析,同时根据已经定义好的事件处理器,来决定当前所解析的部分(元素/属性或是元素内容)是否有必要记录并存储。

(2)示例部分

    SAXDemo.java

View Code
package TestFor0330;

import java.io.File;

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

import org.xml.sax.SAXException;

public class SaxDemo {

    public static void main(String[] args) {
                //创建解析的XML文档对象,其保持在根目录下
        File file=new File("article.xml");
        //创建一个SAXParserFactory对象,通过单例形式
        SAXParserFactory factory=SAXParserFactory.newInstance();
        
        try {
                        //创建SAXParser对象
            SAXParser parser=factory.newSAXParser();
                        //解析文件,定义解析时代事件处理
            parser.parse(file, new MySaxHandler());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
            

    MySaxHandler.java

View Code
package TestFor0330;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

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

public class MySaxHandler extends DefaultHandler {
    //格式化
    static DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //内容        
    private String content;
    
    //事件发生时元素中的字符
    @Override
    public void characters(char[]ch,int start,int lenght)throws SAXException{
        content=new String(ch,start,lenght);
    }
    
    //当解析到元素的结束标签时触发
    @Override
    public void endElement(String uri,String localName,String qName)throws SAXException{
        if("title".equals(qName)){
            System.out.println("标题:"+content);
        }else if("author".equals(qName)){
            System.out.println("作者:"+content);
        }else if("email".equals(qName)){
            System.out.println("电子邮箱:"+content);
        }else if("body".equals(qName)){
            System.out.println("内容:"+content);
        }else if("date".equals(qName)){
            System.out.println("时间:"+content);
        }
    }
    //当解析到元素的开始标签时触发
    @Override
    public void startElement
            (String uri,String localName,String qName,Attributes attributes)
                                        throws SAXException{
        if("article".equals(qName)){
            System.out.println("\r\n找到一篇文章,所属分类:"+attributes.getValue("category")+".");
        }
    }
    
    

}

    article.xml

View Code
<articles>
    <article category="xml">
        <title> XML 概述</title>
        <author>janet</author>
        <email>winfu@163.com</email>
        <date>20080801</date>
    </article >
        
    <article category="java">
    <title> Java 基本语法</title>
        <author>janet</author>
        <email>winfu@163.com</email>
        <date>20080801</date>
    </article>
</articles>

运行结果:

找到一篇文章,所属分类:xml.
标题: XML 概述
作者:janet
电子邮箱:winfu@163.com
时间:20080801

找到一篇文章,所属分类:java.
标题: Java 基本语法
作者:janet
电子邮箱:winfu@163.com
时间:20080801

(3)代码分析

     首先要通过三个步骤解析XML文件  

    SAXParserFactory factory=SAXParserFactory.newInstance();
    SAXParser parser=factory.newSAXParser();
    parser.parse(file, new MySaxHandler());

 

    在解析XML数据时,要创建一个解析的监听器对象,这里通过继承DefaultHandle.

    

posted on 2013-03-31 18:10  winfwu  阅读(442)  评论(0编辑  收藏  举报