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

如何使用Java解析大型XML文件?,java,xml,parsing,dom,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 = DocumentBuilder

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

查看XML解析库。它比原生Java解析器领先了好几英里,而且在我看来,相当优越


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

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

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

256Kb现在是一个相当小的文件:昨天我使用的是一个45Gb的文件,它是200000倍大

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


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

不要将文件读入String/StringReader和所有这些东西。通过
db.Parse(new FileInputStream(…))直接解析文件。
将文件读入内存只会浪费内存和时间。

StringBuffer有一个toString()方法将其转换为字符串。在发布这些问题之前签入JavaDoc,但DecodedFile大小大于字符串大小。所以我们需要使用stringbuffer。但在StringReader中,只接受字符串对象。我的问题是如何解析stringbuffer中存在的大型内容。在解析它时,您是否遇到任何错误,比如OutOfMemory?这可能是更改Java内存设置这样简单的事情。也可能是类似的重复:,,等等,等等。问题只是解析256K文件,JDom很好,还有Dom4J或Xom。您能告诉我您使用了什么来解析45Gb文件吗,实际上,我需要将一个40-50GB大小的XML文件解析为TSV或CSV,您能告诉我应该如何处理这个问题吗?我使用的是Saxon EE中的流媒体设施,记录在