簡體   English   中英

通過DOM解析器編輯BIG XML

[英]Editing a BIG XML via DOM parser

如果有很大的XML,則使用DOM解析器進行解析。 現在需要從XML中添加/刪除元素,即編輯XML如何編輯XML,因為由於內存限制而不會加載整個XML? 解決這個問題的策略是什么?

您可能會考慮使用SAX解析器,它不會將整個文檔都保留在內存中。 它將更快,並且將使用更少的內存。

正如已經提到的其他兩個答案一樣,SAX解析器可以解決問題。 替代DOM的另一個方法是StAX解析器

傳統上,XML API是:

  • 基於DOM-整個文檔作為樹結構讀入內存,供調用應用程序隨機訪問
  • 基於事件-應用程序注冊為在源文檔中遇到實體時接收事件。

兩者都有優勢。 前者(例如DOM)允許隨機訪問文檔,后者(例如SAX)需要較小的內存占用空間,並且通常要快得多。

可以將這兩個訪問隱喻視為相反的對立面。 基於樹的API允許無限,隨機的訪問和操作,而基於事件的API是通過源文檔進行的“一次性操作”。

StAX被設計為這兩個對立面之間的中位數。 在StAX隱喻中,程序化入口點是一個光標,表示文檔中的一個點。 應用程序將光標向前移動-根據需要從解析器中“拉出”信息。 這與基於事件的API(例如SAX)不同,后者將數據“推送”到應用程序-要求應用程序在必要時維護事件之間的狀態以跟蹤文檔中的位置。

StAX是我處理大型文檔的首選方法。 如果需要DOM,請查看支持懶惰地構造DOM節點的DOM實現(例如Xerces):

您對加載XML文檔的內存約束的假設可能僅適用於DOM。 VTD-XML將整個XML加載到內存中,並高效地進行處理(是XML文檔大小的1.3倍)...在內存和性能方面...

http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf

現有的XML框架所不具備的另一個獨特優勢是其增量更新功能...

http://www.devx.com/xml/Article/36379

如stivlo所述,您可以使用SAX解析器來讀取XML。

但是對於編寫XML,您可以將其作為純文本寫入文件輸出流。 我確信您將獲得要求在新標簽后的哪個標簽或標簽下插入新數據的要求。

暫無
暫無

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

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