簡體   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