读取大型xml文档的最佳解决方案是什么?

时间:2014-04-30 05:36:43

标签: java xml

  

避免在内存中使用大对象,或使用String来保存应该使用更好的工具处理的大型文档。例如,不要将大型XML文档读入String或DOM。

以上引用来自一篇文章。读取大型xml文档的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:5)

使用SAX或StAX解析器,它不会在内存中保存xml的所有内容。

  

与DOM解析器不同,SAX解析器不会创建内存   XML文档的表示,因此更快,使用更少   记忆。相反,SAX解析器通知客户端XML文档   通过调用回调来实现结构,即通过调用a上的方法   提供给解析器的org.xml.sax.helpes.DefaultHandler实例。

以下是一个示例实现:

SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
DefaultHandler handler = new MyHandler();
parser.parse("file.xml", handler);

中的位置
  

MyHandler的

定义生成文档/元素的开始/结束等事件时要采取的操作。(以下只是基本实现)

class MyHandler extends DefaultHandler {

    @Override
    public void startDocument() throws SAXException {
    }

    @Override
    public void endDocument() throws SAXException {
    }

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

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

    // To take specific actions for each chunk of character data (such as
    // adding the data to a node or buffer, or printing it to a file).
    @Override
    public void characters(char ch[], int start, int length)
            throws SAXException {
    }

}

this是SAX和StAX解析器样本的好文章

答案 1 :(得分:0)

使用SAX或Stax解析器。不要使用DOM或JAXB。