码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA解析XML之SAX方式

时间:2015-08-09 00:10:57      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

JAVA解析XML之SAX方式

SAX解析xml步骤

  通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory
  通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser
  创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle

 

重写DefaultHandle类的方法

  startElement方法用来遍历xml文件的开始标签;

  endElement方法用来遍历xml文件的结束标签;

  startDocument方法用来标识解析开始;

  endDocument方法用来标识解析结束。

  characters方法用来获取text

  其中:参数qName 遍历到的元素的名称

     且同样会出现空白和换行的问题

下面直接上代码

技术分享
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <name>JAVA编程思想</name>
        <anthor>****</anthor>
        <year>2000</year>
    </book>
    <book id="2">
        <name>疯狂JAVA系列</name>
        <anthor>李刚</anthor>
        <price>89</price>
    </book>
</bookstore>
books.xml
技术分享SAX.java
技术分享
package pers.zww.xml.handler;

import javax.xml.stream.events.StartElement;

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

public class SAXParserHandler extends DefaultHandler{
    int bookIndex=0;
    /*
     * 解析XML元素
     */
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        //开始解析book元素的属性
        
        if (qName.equals("book")) {
            bookIndex++;
            System.out.println("开始遍历第"+bookIndex+"本书");
            
//            //已知book元素下的属性名称,根据属性名称获取属性值
//            String value=attributes.getValue("id");
//            System.out.println("book的属性值:"+value);
            //未知book元素下的属性名称及个数
            int num=attributes.getLength();
            for (int i = 0; i < num; i++) {
                System.out.print("book元素的第"+(i+1)+"个属性名:"+attributes.getQName(i));
                System.out.println(" && 属性值:"+attributes.getValue(i));
                
            }
        }else if(!qName.equals("book")&&!qName.equals("bookstore")){
            System.out.print("节点名:"+qName);
            
        }else {
            
        }
    }
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        super.characters(ch, start, length);
        String val=new String(ch, start, length);
        if (!val.trim().equals("")) {
            System.out.println(" && 节点值:"+val);
        }
    }
    
    /*
     * 用来遍历xml文件的结束标签
     */
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        super.endElement(uri, localName, qName);
        //是否针对一本书已经遍历结束
        if (qName.equals("book")) {
            System.out.println("=======================");
        }
    }
    
    /*
     * 用来标志解析开始
     */
    @Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.startDocument();
        //第一行开始
        System.out.println("SAX解析开始");
    }
    
    /*
     * 用来标志解析结束
     */
    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
        //最后一行结束
        System.out.println("SAX解析结束");
    }
}
SAXParserHandler.java

SAX与DOM对比

  DOM解析原理:先把XML文件整个加载到内存中,在逐个解析;

  SAX解析原理:通过自己创建的Handler类,去逐个分析遇到的每一个节点;(节点分析是从最外层向里层逐个开始).

参考资料

  慕课网JessicaJiang老师视频教程 链接:http://www.imooc.com/video/3789

JAVA解析XML之SAX方式

标签:

原文地址:http://www.cnblogs.com/zhaoww/p/4714094.html

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