SAX解析

xml文件:


<书架> 
  <书> 
    <书名>javaweb开发大全  
    <作者>班长  
    <售价>99.8元  
    <简介>这是不错啊 
    
  <书> 
    <书名>葵花宝典  
    <狗>小狗  
    <作者>岳不群  
    <售价>99.8两  
    <简介>欲练此功... 
   


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 SAXParserDemo {

    public static void main(String[] args) {
        try {
            sax1();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * SAX解析
     * 
     * @throws Exception
     */

    public static void sax1() throws Exception {
        // 获取SAX解析器工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();
        // 获取解析器
        SAXParser saxParser = factory.newSAXParser();
        // 解析
        saxParser.parse("src/book2.xml", new MyHandler2());

    }
}

/**
 * 获取 作者 标签内容
 * 
 * @author Administrator
 */
class MyHandler2 extends DefaultHandler {

    private boolean flag = false;

    /**
     * 解析到 开始 标签默认调用
     */
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if ("作者".contains(qName)) {
            flag = true;
        }
    }

    /**
     * 解析到文本内容自动调用
     */
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        if (flag) {
            String string = new String(ch, start, length);
            System.out.println(string);
        }
    }

    /**
     * 解析到 结束 标签默认调用
     */
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        flag = false;
    }

}

/**
 * 自己的事件处理器
 * 
 * @author Administrator
 *
 */
class MyHandler extends DefaultHandler {

    /**
     * 解析到 开始 标签默认调用
     */
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        System.out.println("开始标签:" + qName);
    }

    /**
     * 解析到文本内容自动调用
     */
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        String string = new String(ch, start, length);
        System.out.println(string);
    }

    /**
     * 解析到 结束 标签默认调用
     */
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        System.out.println("结束标签:" + qName);
    }

}

你可能感兴趣的:(SAX解析)