【问题标题】:What is the best solution for reading a large xml document?阅读大型 xml 文档的最佳解决方案是什么?
【发布时间】:2014-04-30 05:36:43
【问题描述】:

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

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

【问题讨论】:

标签: java xml


【解决方案1】:

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

与 DOM 解析器不同,SAX 解析器不会在内存中创建 XML 文档的表示形式,因此速度更快,使用更少 记忆。相反,SAX 解析器通知客户端 XML 文档 通过调用回调来构建结构,也就是说,通过调用 org.xml.sax.helpes.DefaultHandler 实例提供给解析器。

这是一个示例实现:

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

在哪里

我的处理程序

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

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 解析器示例的好文章

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 2013-05-01
      • 1970-01-01
      相关资源
      最近更新 更多