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

发布于 2025-01-03 07:24:26 字数 759 浏览 0 评论 0原文

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

I am trying to parse an XML file using Java.

The XML file size is 256 kb only. I am using a DOM parser to parse the XML file. How can I parse the large XML file content?

Here's the method that parses the file content:

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;
}

The file content is in the StringBuffer reference object, decodedFile, but when I set it to StringReader it accept only string.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

旧梦荧光笔 2025-01-10 07:24:26

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

For large documents (though I wouldn't call your's large) I'd use StAX.

呆橘 2025-01-10 07:24:26

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

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

Take a look at the JDOM XML parsing library. It's miles ahead of the native Java parsers, and in my opinion, quite superior.

For the code you provided, you actually have to walk the DOM tree and retrieve elements. See here or the official Java tutorial on working with XML for more information on working with XML documents.

攀登最高峰 2025-01-10 07:24:26

您可能想查看 StAX 实现,例如 伍德斯托克斯。它允许您从解析器中提取元素,而不是解析器将数据推送到应用程序中,并允许您暂停解析。

You might want to look at a StAX implementation like Woodstox. It lets you pull elements from the parser, instead of the parser pushing data into the app, and lets you pause parsing.

心舞飞扬 2025-01-10 07:24:26

如今,256Kb 是一个相当小的文件:昨天我正在处理一个 45Gb 的文件,它大了 200,000 倍!

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

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

256Kb is a pretty small file nowadays: yesterday I was working with a 45Gb file which is a factor of 200,000 larger!

It's not clear what your problem is. Any of the normal Java parsing techniques will work perfectly well. Which of them you use depends on why you are parsing the file and what you want to do with the data.

Having said that, many people seem to choose DOM by default because it is so well entrenched. However, more modern object models such as JDOM or XOM are much easier to work with.

云雾 2025-01-10 07:24:26

不要将文件读入 String/StringReader 之类的东西。直接通过 db.parse(new FileInputStream(...)) 解析文件。将文件读入内存只会浪费内存和时间。

Don't read the file into a String/StringReader and all that jazz. Parse the file directly via db.parse(new FileInputStream(...)). Reading the file into memory just wastes memory, and time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文