如果有非常大的XML和DOM解析器用於解析它。 現在需要添加/刪除XML中的元素,即編輯XML 如何編輯XML,因爲整個XML由於內存限制而不會被加載? 解決這個問題的策略是什麼?通過DOM解析器編輯BIG XML
回答
您可能會考慮使用SAX解析器,它不會將整個文檔保留在內存中。它會更快,也會使用更少的內存。
正如stivlo提到的,您可以使用SAX解析器來讀取XML。
但是,對於寫入XML,您可以以純文本形式寫入文件輸出流。我相信你會得到在哪個標籤之後或者在哪個標籤下應該插入新數據的要求。
@MattBall偉大的人,你給-1爲給我工作的想法。更多的是我不知道在這裏貼出答案的人。如果你這樣做,我想人們不會有建設性的想法。 –
由於已經提到了另外兩個答案,一個SAX解析器將會執行這個技巧。您的另一種DOM替代品是StAX parser。
傳統上,XML的API或者是:
- 基於DOM - 將整個文件讀入內存爲
- 基於事件的樹 結構,它通過調用應用程序隨機存取 - 應用寄存器在源文檔中遇到實體時接收事件爲 。
兩者都有優勢;前者(例如DOM)允許隨機訪問該文檔,後者(例如SAX)需要較小的內存,並且通常要快得多。
這兩個訪問隱喻可以被認爲是極性對立面。 A基於樹的API允許無限制的隨機訪問和操縱,而基於事件的API 是通過源文檔的「一次性」傳遞。
StAX被設計爲這兩個對立面之間的中位數。在StAX 隱喻中,編程入口點是代表文檔中的 點的光標。應用程序將光標向前移動 - 根據需要從分析器中'拉'信息。這是 不同於基於事件的API--比如SAX--它將'數據' '推送到應用程序 - 要求應用程序在事件之間保持狀態 以根據需要跟蹤 文檔中的位置。
StAX是我處理大型文檔的首選方法。如果DOM是一個要求,請DOM實現類似的Xerces支持DOM節點懶的建築:
XOM是DOM風格的解析器具有流API。我多次使用過XOM,但我沒有使用流式傳輸功能,可能需要檢查一下。
您對內存限制的假設加載XML文檔可能只適用於DOM。 VTD-XML加載到內存整個XML,並有效地做它(1.3倍的XML文檔的大小)......無論是在內存和性能...
http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf
的另一個顯着優點,它莫屬存在XML框架,是它的增量更新能力......
- 1. 使用DOM分析器解析和編輯HTML解析器
- 2. SAX XML解析器或DOM解析器?
- 3. 在PHP中解析BIG XML
- 4. Perl的XML :: DOM解析器::
- 5. xml dom解析
- 6. 通過編輯DOM「黑客」?
- 7. 使用XML編輯器解析DTD
- 8. 通過DOM解析器從XML處理CDATA
- 9. 用Dom解析XML
- 10. JAVA DOM XML解析
- 11. PHP,DOM,XML解析
- 12. DOM XML解析android
- 13. 編寫通用XML解析器
- 14. 通過id解析XML解析
- 15. 通過消化器解析大XML
- 16. 編輯JSON解析器來解析geoJSON?
- 17. 嵌套的XML解析DOM解析
- 18. XML解析通過LINQ
- 19. 解析通過XML童車
- 20. 通過simplexml解析xml
- 21. 用於非xml的DOM解析器
- 22. java DOM XML解析器內部元素
- 23. Java的DOM和SAX XML解析器
- 24. 我如何使用DOM XML解析器
- 25. Perl的XML :: DOM解析器使用
- 26. 在Java中的XML DOM解析器?
- 27. UIWebView是否允許XML DOM解析器?
- 28. 用於DOM的Perl XML解析器
- 29. DOM解析器getElement
- 30. PHP - 使用DOM編輯XML
的要求是,SAX解析器不使用 – JavaGreenhorn
爲什麼會出現這樣的要求?你可以使用StAX解析器嗎? –