2011-12-28 86 views
2

是否有任何有效的XML解析器可供Android高效解析大型XML文件? XML文檔在沒有CDATA的元素中包含HTML文本。在Android中解析大型XML文件的問題

目前我在Android中使用SAX解析器。當字符串以HTML字符分隔時,我會追加字符串,但解析整個文件需要4-5分鐘。一旦我開始分析模擬器正在中止。登錄貓O/P如下圖所示...

我目前的情況:在SD卡上

  1. 11 MB的XML文件
  2. 文件包含HTML文本爲XML一些元素,這是不括在CDATA
  3. 模擬器2-3分鐘

我的查詢後中止是:

  1. 是否有任何Android的實際限制來解析大文件
  2. 我應該使用不同的解析器是更有效的這樣的文件

12月1日至20日:44:22.133:I/dalvikvm( 19715):DALVIK THREADS:
01-20 12:44:22.143:I/dalvikvm(19715):「main」prio = 5 tid = 1 TIMED_WAIT
01-20 12:44:22.143:I/dalvikvm(19715) ):| group =「main」sCount = 1 dsCount = 0 s = N obj = 0x4001d8e0 self = 0xccb0
01-20 12:44:22.143:I/dalvikvm(19715):| sysTid = 19715 nice = 0 sched = 0/0 cgrp =默認句柄= -1345026008
01-20 12:44:22.143:I/dalvikvm(19715):| schedstat =(1890827936 745978586 1231)
01-20 12:44:22.143:I/dalvikvm(19715):at java.lang.Object.wait(Native Method)
01-20 12:44:22.143:I/dalvikvm(19715): - 等待< 0x44e7c158>(android.os.MessageQueue)
01-20 12:44:22.143:I/dalvikvm(19715):at java.lang.Object.wait(Object.java: 326)
01-20 12:44:22.143:I/dalvikvm(19715):at android.os.MessageQueue.next(MessageQueue.java:142)
01-20 12:44:22.143:I/dalvikvm( 19715):at android.os.Looper.loop(Looper.java:110)
01-20 12:44:22.143:I/dalvikvm(19715):at android.app.ActivityThread.main(ActivityThread.java:4627 )
01-20 12:44:22.143:I/dalvikvm(19715):at java.lang.reflect.Method.invokeNative(Native Method)
01-20 12:44:22.152:I/dalvikvm(19715):at java.lang.reflect.Method.invoke(Method.java:521)
01-20 12:44:22.152:I/dalvikvm(19715):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit .java:868)
01-20 12:44:22.152:I/dalvikvm(19715):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-20 12:44 :22.152:I/dalvikvm(19715):at dalvik.system.NativeStart.main(Native Method)
01-20 12:44:22.152:I/dalvikvm(19715):「AsyncTask#1」prio = 5 tid = 7 RUNNABLE
01-20 12:44:22.152:I/dalvikvm(19715): | group =「main」sCount = 0 dsCount = 0 s = N obj = 0x44e98170 self = 0x116238
01-20 12:44:22。152:I/dalvikvm(19715):| sysTid = 19721 nice = 0 sched = 0/0 cgrp =默認句柄= 1139576
01-20 12:44:22.162:I/dalvikvm(19715):| schedstat =(30192250334 11754013998 4287)
01-20 12:44:22.162:I/dalvikvm(19715):at java.lang.AbstractStringBuilder。(AbstractStringBuilder.java:~89)
01-20 12:44:22.162 :I/dalvikvm(19715):at java.lang.StringBuilder。(StringBuilder.java:96)
01-20 12:44:22.162:I/dalvikvm(19715):at com.app.sampleApp.ExampleHandler.characters (ExampleHandler.java:346)
01-20 12:44:22.162:I/dalvikvm(19715):at org.apache.harmony.xml.ExpatParser.text(ExpatParser.java:167)
01-20 12 :44:22.162:I/dalvikvm(19715):at org.apache.harmony.xml.ExpatParser.append(Native Method)
01-20 12:44:22.162:I/dalvikvm(19715):at org.apache .harmony.xml.ExpatParser.par seFragment(ExpatParser.java:521)
01-20 12:44:22.162:I/dalvikvm(19715):at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:482)
01-20 12:44:22.162:I/dalvikvm(19715):at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:320)
01-20 12:44:22.162:I/dalvikvm(19715): at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:277)
01-20 12:44:22.162:I/dalvikvm(19715):at com.app.sampleApp.SplashScreen.parsing(SplashScreen。 java:95)
01-20 12:44:22.162:I/dalvikvm(19715):at com.app.sampleApp.SplashScreen $ FetchDataFromServer.doInBackground(SplashScreen.java:66)
01-20 12:44: 22.162:I/dalvikvm(19715):at com .app.sampleApp.SplashScreen $ FetchDataFromServer.doInBackground(SplashScreen.java:1)
01-20 12:44:22.173:I/dalvikvm(19715):at android.os.AsyncTask $ 2.call(AsyncTask.java:185 )
01-20 12:44:22.173:I/dalvikvm(19715):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)
01-20 12:44:22.173:I/dalvikvm(19715):at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-20 12:44:22.173:I/dalvikvm(19715):位於java.util.concurrent.ThreadPoolExecutor。 runWorker(ThreadPoolExecutor.java:1068)
01-20 12:44:22.173:I/dalvikvm(19715):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:561)
01-20 12 :44:22.173:I/dalvikvm(19715):at java.lang.Thread.run(Thread.java:1096)
01-20 12:44:22.173:I/dalvikvm(19715):「Binder Thread#2 「prio = 5 tid = 6 NATIVE
01-20 12:44:22.173:I/dalvikvm(19715):| group =「main」sCount = 1 dsCount = 0 s = N obj = 0x44e7adc0 self = 0x136b18
01-20 12:44:22.173:I/dalvikvm(19715):| sysTid = 19720 nice = 0 sched = 0/0 cgrp =默認句柄= 1277072
01-20 12:44:22.173:I/dalvikvm(19715):| schedstat =(4379710 8487993 4)
01-20 12:44:22.173:I/dalvikvm(19715):at dalvik.system.NativeStart.run(Native Method)
01-20 12:44:22.183:I/dalvikvm(19715):「Binder Thread#1」prio = 5 tid = 5 NATIVE
01-20 12:44:22.183:I/dalvikvm(19715):| group =「main」sCount = 1 dsCount = 0 s = N obj = 0x44e77130 self = 0x132868
01-20 12:44:22.183:I/dalvikvm(19715):| sysTid = 19719 nice = 0 sched = 0/0 cgrp =默認句柄= 1271608
01-20 12:44:22.183:I/dalvikvm(19715):| schedstat =(9087362 4814877 5)
01-20 12:44:22.183:I/dalvikvm(19715):at dalvik.system.NativeStart.run(Native Method)
01-20 12:44:22.183:I/dalvikvm(19715):「JDWP」守護進程prio = 5 tid = 4 VMWAIT
01-20 12:44:22。183:I/dalvikvm(19715):| group =「system」sCount = 1 dsCount = 0 s = N obj = 0x44e752a0 self = 0x1245a0
01-20 12:44:22.183:I/dalvikvm(19715):| sysTid = 19718 nice = 0 sched = 0/0 cgrp =默認句柄= 1178336
01-20 12:44:22.183:I/dalvikvm(19715):| schedstat =(13148782 23404684 16)
01-20 12:44:22.183:I/dalvikvm(19715):at dalvik.system.NativeStart.run(Native Method)
01-20 12:44:22.183:I/dalvikvm(19715):「Signal Catcher」daemon prio = 5 tid = 3 VMWAIT
01-20 12:44:22.183:I/dalvikvm(19715):| group =「system」sCount = 1 dsCount = 0 s = N obj = 0x44e751e8 self = 0x120298
01-20 12:44:22.183:I/dalvikvm(19715):| sysTid = 19717 nice = 0 sched = 0/0 cgrp =默認句柄= 1275872
01-20 12:44:22.192:I/dalvikvm(19715):| schedstat =(650295 9179530 2)
01-20 12:44:22.192:I/dalvikvm(19715):at dalvik.system.NativeStart.run(Native Method)
01-20 12:44:22.192:I/dalvikvm(19715):「HeapWorker」daemon prio = 5 tid = 2 VMWAIT
01-20 12:44:22.192:I/dalvikvm(19715):| group =「system」sCount = 1 dsCount = 0 s = N obj = 0x438b8d00 self = 0x12efc0
01-20 12:44:22.192:I/dalvikvm(19715):| sysTid = 19716 nice = 0 sched = 0/0 cgrp =默認句柄= 1249312
01-20 12:44:22.192:I/dalvikvm(19715):| schedstat =(92741950 1647777523 865)
01-20 12:44:22.192:I/dalvikvm(19715):at com.android.internal.os.BinderInternal $ GcWatcher.finalize(BinderInternal.java:~48)
01 -20 12:44:22.192:I/dalvikvm(19715):在dalvik.system.NativeStart.run(本機方法)

+0

歡迎[SO]。請注意格式化,有一些簡單的工具可以幫助。同時避免提出多個問題。這只是一個問題。 – Merlin 2011-12-28 12:23:45

回答

1

對於大XML使用DOM解析器

0

你可能想嘗試XmlPullParser這是一個非驗證解析器。它在簡單的XML結構上運行得非常好,並允許更高性能的分析器。

有文檔