XML解析之使用SAX分析操作XML文档

来源:互联网 发布:猿飞菖蒲 知乎 编辑:程序博客网 时间:2024/06/15 18:39
package forXML;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXParser {    /**     * 这是实验的第二发~~~哈哈哈     *      * @author 焦含寒     */    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {        // 创建解析器        SAXParserFactory factory = SAXParserFactory.newInstance();        javax.xml.parsers.SAXParser parser = factory.newSAXParser();        // 关联xml与事件处理对象        parser.parse("src/forXML/books.xml", new MyDefaultHandler());        System.out.println("--------我还是一条可爱的分界线--------");        System.out.println("--------查找IDp0002--------");        parser.parse("src/forXML/books.xml", new MyDefaultHandler2());    }}// 遍历xml文件class MyDefaultHandler extends DefaultHandler {    @Override    public void startDocument() throws SAXException {        // TODO Auto-generated method stub        super.startDocument();    }    @Override    public void endDocument() throws SAXException {        // TODO Auto-generated method stub        super.endDocument();    }    @Override    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        if (qName.equals("book")) {            for (int i = 0; i < attributes.getLength(); i++) {                System.out.println(attributes.getQName(i) + ":" + attributes.getValue(i));            }        } else if (!qName.equals("books")) {            System.out.print(qName + ":");        }    }    @Override    public void endElement(String uri, String localName, String qName) throws SAXException {        // TODO Auto-generated method stub        super.endElement(uri, localName, qName);    }    @Override    public void characters(char[] ch, int start, int length) throws SAXException {        // TODO Auto-generated method stub        String s = new String(ch, start, length);        if (!s.trim().equals("")) {            System.out.println(s);        }    }}// 查找class MyDefaultHandler2 extends DefaultHandler {    private boolean isId;    @Override    public void startDocument() throws SAXException {        // TODO Auto-generated method stub        super.startDocument();    }    @Override    public void endDocument() throws SAXException {        // TODO Auto-generated method stub        super.endDocument();    }    @Override    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {        if (qName.equals("book")) {            for (int i = 0; i < attributes.getLength(); i++) {                // System.out.println(attributes.getQName(i)+":"+attributes.getValue(i));                if (attributes.getValue(i).equals("p0002")) {                    this.isId = true;                    System.out.println(attributes.getQName(i) + ":" + attributes.getValue(i));                }            }        } else if (!qName.equals("books") && isId) {            System.out.print(qName + ":");        }    }    @Override    public void endElement(String uri, String localName, String qName) throws SAXException {        // TODO Auto-generated method stub        super.endElement(uri, localName, qName);    }    @Override    public void characters(char[] ch, int start, int length) throws SAXException {        // TODO Auto-generated method stub        String s = new String(ch, start, length);        if (!s.trim().equals("") && isId) {            System.out.println(s);        }    }}

这里写图片描述

原创粉丝点击