繁体   English   中英

如何使用 Java 解析大型 XML 文件?

[英]How do I parse a large XML file using Java?

我正在尝试使用 Java 解析 XML 文件。

XML 文件大小仅为 256 kb。 我正在使用 DOM 解析器来解析 XML 文件。 如何解析大型 XML 文件内容?

下面是解析文件内容的方法:

public Document parse_a_string(StringBuffer decodedFile) {
    Document doc1 = null;
    try {
        DocumentBuilderFactory factory =
                DocumentBuilderFactory.newInstance();
        DocumentBuilder db = factory.newDocumentBuilder();
        InputSource inStream = new InputSource();

         // problem here
        inStream.setCharacterStream(new StringReader(decodedFile.toString()));

        doc1 = db.parse(inStream);
    } catch (Exception e) {
    }
    return doc1;
}

文件内容在StringBuffer参考对象中, decodedFile ,但是当我将它设置为StringReader它只接受字符串。

对于大型文档(尽管我不会称您为大型文档),我会使用StAX

256Kb 现在是一个非常小的文件:昨天我正在处理一个 45Gb 的文件,它大了 200,000 倍!

不清楚你的问题是什么。 任何普通的 Java 解析技术都可以很好地工作。 您使用其中的哪一个取决于您解析文件的原因以及您想对数据做什么。

话虽如此,许多人似乎默认选择 DOM,因为它根深蒂固。 但是,更现代的对象模型(例如JDOMXOM)更易于使用。

查看JDOM XML 解析库。 它领先于本地 Java 解析器数英里,在我看来,相当优越。

对于您提供的代码,您实际上必须遍历 DOM 树并检索元素。 有关使用 XML 文档的更多信息,请参阅此处有关使用 XML官方 Java 教程

您可能想查看像Woodstox这样的StAX 实现 它允许您从解析器中提取元素,而不是解析器将数据推送到应用程序,并让您暂停解析。

不要将文件读入 String/StringReader 和所有爵士乐。 直接通过db.parse(new FileInputStream(...)).解析文件db.parse(new FileInputStream(...)). 将文件读入内存只会浪费内存和时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM