Java 5:XML -SAX解析

解析XML
DOM(Java提供) (整个文件加载到内存中去执行解析)
SAX(Javat提供) 创建一个Handler类逐个节点的访问解析;个人理解因为不是一次性加载到内存,这个不提供修改保存;
JDOM
DOM4J

SAX 解析

准备工作

        //创建SAXParserFactory
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //创建SAXParser
        SAXParser parser = factory.newSAXParser();
        //创建DefaultHandler
        SaxParserHandler handler = new SaxParserHandler();
        //解析xml
        parser.parse("books.xml", handler);
        //如果需要暴露出解析的结果 需要DefaultHandler中处理并提供返回对象的方法
public class SaxParserHandler extends DefaultHandler {
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        System.out.println("开始");
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
        System.out.println("结束");
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        System.out.println("startElement");

        //其中qName是element对应的标签名称 attributes是所有属性
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        System.out.println("endElement");
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);

        //原理是 handler 会记录标签的开始和结束为止 然后可以通过String(ch,start,length)得到内容
        
        //如果需要保存到对象 在characters 中将 characters的值获取到, 保存到全局变量中,再在endElement中更加qName中去保存; 
    }
}
注意 : characters 中解析value时,也会将#text 解析进去,表现出空格和换行;

你可能感兴趣的:(Java 5:XML -SAX解析)