我有一個很大的XML文件,其中包含許多子元素。我想能夠運行一些xpath查詢。我嘗試在java中使用vtd-xml,但有時會出現outofmemory錯誤,因爲xml非常大以適應內存。有沒有一種處理這種大型XML的替代方法。處理大型XML文件
回答
嘗試http://code.google.com/p/jlibs/wiki/XMLDog
它執行使用SAX的XPath而不在內存中的XML文檔的表示。
大文件
不能將XPath與直接SAX流一起使用(對每個查詢重新解析整個文件很少)。 –
@Glenn Maynard - 但是當然,OP *必須爲每個查詢(或一批查詢)重新分析文件。 DOM太大而不適合內存。 –
什麼是你想現在做的工作時是非常有效的?通過它的聲音,您試圖使用基於DOM的解析器,它基本上將整個XML文件作爲DOM表示加載到內存中。如果你正在處理一個大文件,你最好使用一個SAX解析器,它以流的方式處理XML文檔。
我個人建議StAX這個。
你使用標準的vtd或擴展的VTD-xml嗎?如果你使用擴展的XML,那麼你可以選擇使用內存映射......你嘗試過嗎?
如果您計劃在長壽命的應用程序中動態編譯多個表達式,使用XPath可能不是一個好主意。
我不完全確定XPath的Java版本是如何工作的,但在.NET XPath中編譯動態程序集,然後將其添加到應用程序域。表達式的後續使用看看現在加載到內存中的程序集。
在一個案例中,我在使用XPath時導致了一種情況,我認爲,這種類型的機制正在減慢填充類似於內存泄漏的內存。
我的理論是,因爲每個表達式都是使用用戶的值編譯的,所以每個編譯的表達式都可能是唯一的,因此編譯了新的表達式並將其添加到應用程序域。
由於您可以從應用程序域中刪除程序集而無需重新啓動整個應用程序域,因此每次評估表達式時都會消耗內存,並且無法恢復。結果,代碼以內存中程序集的形式泄漏內存,過了一段時間,你就知道結果了。
- 1. 處理大型XML文件
- 2. 處理大型XML文檔
- 3. 在Android中處理大型XML文件
- 4. Emacs處理大型XML文件
- 5. 處理大型json文件
- 6. 處理大型xlsx文件
- 7. 解析並處理XML大文件
- 8. 處理非結構化大XML文件
- 9. 處理大型文本文件?
- 10. 如何處理大型文本文件?
- 11. 使用libxml-ruby塊按塊處理大型XML文件
- 12. 用Heroku存儲和處理大型XML文件?
- 13. 在iPhone應用程序中處理大型XML文件
- 14. 將大型複雜XML文件處理爲Solr
- 15. java-如何使用Saxon庫處理大型XML文件
- 16. 用Python處理大型csv文件
- 17. 如何處理大型Excel文件?
- 18. 如何處理大型MXML文件
- 19. 在python中處理大型XLSX文件
- 20. java.lang.OutOfMemoryError處理大型CSV文件時
- 21. 變換處理大型文件只
- 22. NodeJS,promise,streams - 處理大型CSV文件
- 23. 處理開發和大型JavaScript文件?
- 24. 處理大文件
- 25. 處理大文件
- 26. Logstash:處理大型郵件
- 27. 在PHP處理的大型XML文件上「字符串無法解析爲XML」
- 28. 如何處理XML文件
- 29. 處理XML文件(JAVA)
- 30. 多次處理XML文件
爲什麼在這個問題上的Python標籤?你希望人們會提供Python解決方案嗎? – Spaceghost
解析文檔或嘗試xpath查詢時,是否出現內存不足錯誤?如果第二個,也許問題是與xpath查詢。 無論哪種方式,您是否嘗試增加JVM堆的-Xmx值? – Spaceghost
嘗試擴展vtd-xml並使用內存映射選項 –