📜  SAX Parser-解析XML文档(1)

📅  最后修改于: 2023-12-03 15:34:49.040000             🧑  作者: Mango

SAX Parser-解析XML文档

什么是 SAX Parser?

SAX (Simple API for XML)是一种基于事件驱动的解析XML文档的API。使用SAX解析器,程序员不需要将整个文档加载进内存,可以边读边处理XML文档,适合处理大型XML文档,同时也很快速。

如何使用SAX Parser?
SAXParserFactory fac = SAXParserFactory.newInstance();
SAXParser parser = fac.newSAXParser();
parser.parse(new File("file.xml"), new MyHandler());
  • 创建SAXParserFactory实例
  • 调用newSAXParser()方法获取SAXParser实例
  • 调用parse()方法解析XML文档

需要一个SAX事件处理器(MyHandler),来响应SAX解析器发送的事件。在此处,可以自定义事件处理器。

自定义SAX事件处理器
class MyHandler extends DefaultHandler {

    boolean inTitle = false;

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes atts) throws SAXException {

        if (qName.equals("title")) {
            inTitle = true;
        }

    }

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

        if (inTitle) {
            System.out.println("Title: " + new String(ch, start, length));
        }

    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {

        if (qName.equals("title")) {
            inTitle = false;
        }

    }

}
常用的SAX事件
  • startDocument() 解析器开始解析文档时调用
  • endDocument() 解析器解析文档结束时调用
  • startElement() 开始解析元素时调用
  • endElement() 结束解析元素时调用
  • characters() 解析文本内容时调用
优点
  • 速度快,因为不需要将整个文档加载进内存
  • 适合处理大型XML文档
缺点
  • 需要自己维护元素的层次结构
  • 不适合处理大量的XML数据
参考文献