[英]using SAX parser, how do you parse an xml file which has same name tags but in different elements?
[英]Is It possible to parse large xml file which has size 800 MB using SAX Parser
我正在解析transxchange
數據,其中包含一些非常大的文件(近800 MB) 。 當我嘗試解析這些文件時,出現以下錯誤。
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
=======================================================================
at java.util.ArrayList.<init>(Unknown Source)
at java.util.ArrayList.<init>(Unknown Source)
at JourneyPatternSections.<init>(JourneyPatternSections.java:21)
at ReadBusData.startElement(ReadBusData.java:131)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at ReadBusData.parseDocument(ReadBusData.java:51)
at ReadBusData.<init>(ReadBusData.java:41)
at ReadBusData.main(ReadBusData.java:218).
我正在關注本教程。
有誰能夠幫助我。
問:是否可以使用SAX Parser解析大小為800 MB的大型xml文件?
答:當然可以!
問題不在於SAX。 實際上,SAX是處理大型文件的理想選擇。
您的arraylist顯然出現了問題。
它有多大?
其他結構有多大?
您實際上是否需要存儲要為其分配空間的所有數據?
您是否正在使用任何VM標志運行程序以分配更多內存?
您的電腦有多少內存? 可以在支持更多內存的PC上運行它嗎? 一台64位PC?
您是否正在使用64位JVM?
建議:下載並嘗試使用Visual VM在代碼級別對問題進行故障排除:
您可能會發現分配的數據遠遠超出了預期。
恕我直言...
增加堆大小,例如,使用-Xmx1g
啟動VM。
SAX將成為解析大型文件的最佳方法。 DOM解析會將整個文檔加載到內存中,您會遇到問題。 您可能會遇到問題,因為您試圖將所有內容存儲在某種形式的集合中。 SAX非常適合解析xml,處理它並繼續前進。
該錯誤是發生在創造時,我們正在創建的數據結構。 您需要減少正在使用的內存量或增加程序所擁有的內存量。
這些天不是1 GB。 如果您可以給它4到16 GB的空間,這將使文件處理變得更加簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.