xml的sax解析

说明:
1. sax主要用于对xml文件解析,不能进行crud操作
2. sax使用”推”机制,将解析器发现的内容推送给事件处理器,由用户通过事件处理器决定如何处理。

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;

public class sax {

    public static void main(String[] args) throws Exception {
        // 1. 创建SAX解析工厂 : SaxParserFactory
        // newInstance() 是 SAXParserFactory类 的静态方法 
        SAXParserFactory spf = SAXParserFactory.newInstance();

        // 2. 创建SAX解析器 : SAXParser  (抛异常)
        SAXParser sp = spf.newSAXParser();

        // 3. 将解析对象和事件处理器关联
        sp.parse("src/myclass1.xml", new MyDefaultHandler());
    }
}

// 定义事件处理类
class MyDefaultHandler extends DefaultHandler{
    private boolean isName =false;
    private boolean isAge = false;  

    // 文档开始
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
    }

    // xml中元素(…,…,名字,属性)
    @Override
    public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        if(qName.equals("名字"))
            isName = true;
        if(qName.equals("年龄"))
            isAge = true;
    }

    // xml中文本(文档本身,开始位置,长度)
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        String con = new String(ch,start,length);
        // 去除xml中空行的影响
        if(!con.trim().equals("") && (isName||isAge))
            System.out.println(con);
        isName =false;
        isAge = false;
    }

    // xml 元素结束
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
    }

    // 文档结束
    @Override
    public void endDocument() throws SAXException {
        super.endDocument();

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值