文章标题

1、很久没有写博客了,今天和大家分享一下关于SAX的心得,以及如何简单解析。

SAX简介

1、SAX适合处理数据流类型的数据,当碰到数据时,比如通过了<elelment1>在通过<element5>的时候,在此时前面一个已经丢失。
2、SAX的解析是将标签分为标签开始(startelement),标签结束(endelement),和字符串(character)的形式解析的。这三种方法以及其他的方法都继承类DefaultHandle.
3、方法的介绍:
    startelement:当遇到开始标签的时候,自动调用该方法。
    character:在标签中读取该标签内字符串
    endelelment:当遇到结束时,自动调用该方法。

程序测验

XML文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<书架>
    <>
        <书名>java开发大全</书名>
        <作者>毛大大</作者>
        <售价>19.9</售价>
        <简介>这是一本牛逼的书</简介>
    </>

    <>
        <书名>毛毛开发大全</书名>
        <作者>郭大大</作者>
        <售价>19.9</售价>
        <简介>这是一本牛逼的书</简介>
    </>
</书架>

本代码是一个简单的xml,仅供测试之用。

SAX解析代码片:

一下的代码解析了整个xml文档,同时拿到了标签里面的内容。拿取方法相较于JAXP来说要简单很多。

package maomao;

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

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

/**
 * 本测试为如何使用SAX解析器对XML文件进行解析
 * @author Dale
 *
 */
public class JaxpSaxTest {
        public static void main(String[] args) {
            try {
                run1();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

public static void run1() throws Exception {
        //SAX解析工厂类
            SAXParserFactory spf = SAXParserFactory.newInstance();
            //调取SAX解析器对象
            SAXParser sParser=  spf.newSAXParser();
            sParser.parse("src/book2.xml",new MyHandle());
        }
}

/**
 * 目的:获取作者标签,或者获取某标签
 * @author Dale
 *通过判断来达到效果
 */
class MyHandle1 extends DefaultHandler {

    //定义一个全局变量作为标准变量,
    private boolean flag = false;

    public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
            //qName是获取的标签名,通过equals方法进行对比
            if ("作者".equals(qName)) {
                flag=true;
            }
    }


    public void characters(char[] ch, int start, int length)throws SAXException {
        if (flag) {
            //当flag为true时执行下面方法
            String string= new String(ch,start,length);
            System.out.println(string);
        }
    }

    public void endElement(String uri, String localName, String qName)throws SAXException {
            flag=false;
    }

}
/**
MyHandle类继承DefaultHandle方法
需要重写方法startelement,endelement,character
**/

class MyHandle extends DefaultHandler{
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.startDocument();
    }
    //当读取到标签开头时,默认调用此方法
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        System.out.println("开始标签:"+qName);
    }
    //当读取到字符串时默认调用此方法
    public void characters(char[] ch, int start, int length)throws SAXException {
        String string =new String(ch,start,length);
        System.out.println(string);
    }
    //读取到标签结束默认实现此方法
    public void endElement(String uri, String localName, String qName)throws SAXException {
        System.out.println("结束标签:"+qName);
    }
    public void endDocument() throws SAXException {
        super.endDocument();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值