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

时间:2012-02-08 16:33:54

标签: java xml parsing dom

我正在尝试使用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时,它只接受字符串。

5 个答案:

答案 0 :(得分:5)

对于大型文档(虽然我不会称之为大文档)我会使用StAX

答案 1 :(得分:3)

256Kb现在是一个非常小的文件:昨天我使用的是45Gb文件,这个文件大了200,000倍!

目前尚不清楚你的问题是什么。任何普通的Java解析技术都可以很好地工作。您使用它们中的哪一个取决于您解析文件的原因以及您要对数据执行的操作。

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

答案 2 :(得分:2)

查看JDOM XML解析库。它比原生Java解析器领先一步,而且在我看来,相当优越。

对于您提供的代码,您实际上必须遍历DOM树并检索元素。有关使用XML文档的详细信息,请参阅hereofficial Java tutorial on working with XML

答案 3 :(得分:2)

您可能希望查看StAX implementation之类的Woodstox。它允许您从解析器中提取元素,而不是将数据推送到应用程序中,并让您暂停解析。

答案 4 :(得分:0)

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