使用SAX方式解析XML

本文介绍了如何使用Java的SAX解析器处理XML文件。首先,创建了一个XML文件,然后在SAXTest.java中定义了main方法,启动解析过程。接着,自定义了一个Handle类,继承自DefaultHandler,用于处理解析事件。详细解析了DefaultHandler中的关键方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建XML文件
这里写图片描述

目录结构:
这里写图片描述

二、新建一个带有main方法的类(SAXTest.java)

public class SAXTest {
    public static void main(String[] args) {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            SAXParser parser = factory.newSAXParser();
            SAXParserHandle handle = new SAXParserHandle();
            parser.parse("books.xml", handle);

        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

三、新建Handle类,继承DefaultHandler

public class SAXParserHandle extends DefaultHandler {
    /*
     * 标识解析开始
     * @see org.xml.sax.helpers.DefaultHandler#startDocument()
     */
    @Override
    public void startDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.startDocument();
        System.out.println("----解析开始----");
    }

    /*
     * 标识解析结束
     * @see org.xml.sax.helpers.DefaultHandler#endDocument()
     */
    @Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument();
        System.out.println("----解析结束----");
    }

    /*
     * 解析XML元素
     * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
     */
    @Override
    public void startElement(String arg0, String arg1, String name,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        super.startElement(arg0, arg1, name, attributes);
        if(name.equals("book")){
            System.out.println("==========开始遍历某一本书的内容==========");
            int length = attributes.getLength();
            for(int i=0;i<length;i++){
                System.out.print("属性:"+attributes.getQName(i));
                System.out.println("---值:"+attributes.getValue(i));
            }
        }else if(!name.equals("book") && !name.equals("bookstore")){
            System.out.print("节点:"+ name);
        }
    }

    @Override
    public void endElement(String arg0, String arg1, String name)
            throws SAXException {
        // TODO Auto-generated method stub
        super.endElement(arg0, arg1, name);
        if(name.equals("book")){
            System.out.println("==========结束遍历某一本书的内容==========");
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        // TODO Auto-generated method stub
        super.characters(ch, start, length);
        String nodeValue = new String(ch, start, length);
        if(!nodeValue.trim().equals("")){
            System.out.println("值:"+nodeValue);
        }
    }
}

解析结果:
这里写图片描述

DefaultHandler中方法解读

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值