2010-10-12 54 views
1

除了內置的kXML解析器外,我正在尋找適用於Android的XML解析解決方案。我試圖解析從服務器下載的大型(4MB +)XML文件,在解析時嘗試分配1MB +字節數組後,kXML解析器會拋出OutOfMemory錯誤。一個好的流式XML解析器不應該分配這麼大的數組!適用於Android的替代XML解析器實現

在Android中使用的kXML v2解析器似乎大約7歲。我想嘗試其他方法來查看它是否修復了我的問題,理想情況是實現了相同的org.xmlpull.v1接口,因爲我的代碼已經寫入了它。 Woodstox看起來不錯,它有一個XMLPullParser適配器,但顯然Android工程師正在使包含javax.xml.streaming庫變得困難。我看到一些相當複雜的「jar-jar」變通方法,但是如果有更簡單的方法,我寧願不花費大量的時間來處理Ant。是否有其他人已經得到另一個XML拉解析器工作,並可以指向我?

回答

1

迄今爲止發現的最佳解決方案是包含XmlPullParser的舊Javolution庫。 Javolution pull解析器實際上並未實現org.xmlpull.v1.XmlPullParser,但它具有完全相同的方法簽名,只不過它的方法返回CharSequence而不是String。這很容易通過將其包裝到自制適配器中進行修復。

不幸的是,似乎Javolution拉解析器已被棄用,不能在最新版本的JAR中找到,但我發現,仍然有在這裏一個較舊的JAR文件:http://download.osgeo.org/webdav/geotools/org/javolution/javolution/3.7.1/

而且事實證明我的問題是我的XML文件碰巧在其末尾包含超過1MB的0x00字符,而這些字符並不是合法的字符!但是,如果有人想嘗試另一個解析器,我希望這可以幫助你。

1

在最壞的情況下,您可能會回到SAX,這是最有效的內存方法。雖然這是我的代碼中的一個重大變化。

0

我打算使用StAX實現的源代碼,您可以下載here。我剛剛發佈了一個關於它的問題here。還有其他的實現。像Woodstox