如何使用Java解析大型XML文件?
我正在尝试使用Java解析XML文件 XML文件大小仅为256 kb。我正在使用DOM解析器来解析XML文件。如何解析大型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
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中的流媒体设施,记录在