簡體   English   中英

將具有巨大文件大小(800MB UP)的 XML 內容解析和拆分為 Java 中的幾個 xml 文件的最快方法是什么

[英]What is the fastest way to parse & split XML content with huge file size (800MB UP) into several xml files in Java

我有 XML 文件(GML 文件),它可能包含 1GB 以上的文件大小,需要根據內容分成幾個 xml 文件。

基本上,我需要一個不會將內容加載到 memory 的解析器。 必須以 32 位運行。 目標操作系統是 Windows XP UP。

我正在考慮以下選項:

  1. 擴展 org.xml.sax.helpers.DefaultHandler

  2. 使用 Xerces

  3. 使用 VTD-XML(如果不將內容加載到 memory 中;我知道 VTD-XML 的巨大類,但它只能用於 64 位平台;如果有辦法在 2GB 文件大小中使用 32 位 VTD-XML)

感謝任何有關正確方向的指導。

有關Java 中的小型簡單文檔,請參閱最快的 XML 解析器 (問題是關於小文件和 dom 處理,答案也適用於大文件)

通常,您使用 SAX/流解析器來完成這項工作。 (選項1)

同時使用 SAX(或 StAX)解析器( Aalto? )和編寫器。

我假設文檔包裝器(根樹)是已知的。

  1. 首先閱讀最初的開始(包裝)元素。

  2. 然后打開一個新的writer,寫文件start wrapper。 然后繼續讀寫相應的事件,直到你的停止條件。 然后編寫結束文檔包裝器。 重復n次。

  3. 當您的閱讀器到達最終文檔包裝時停止。

對於 1 和 3:我發現跟蹤節點級別比檢查元素名稱更有用; 它通常有效並且速度更快。

顯然,您可以通過在第 1 點添加一些變量並在第 2 點應用它們來轉發包裝器詳細信息(如果存在)。您的停止標准應該是一定數量的節點,一直檢查文件大小會減慢速度。

如果您的拆分算法不需要太多上下文(即不需要 DOM 或部分 DOM),那么 SAX(即實現DefaultHandler )肯定是最簡單的方法之一,並且不會添加外部依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM