2013-06-20 43 views
1

我想解析一個XML文件,但我遇到了文檔問題!XmlPullParser變空而不是START_TAG

我有問題,與這條線:

parser.require(XmlPullParser.START_TAG, ns, "CarStatus"); 

但是,我得到的,而不是START_TAG空。

XML HTTP POST響應:

06-20 15:15:40.804: I/RESPONSE(2270): <?xml version="1.0" encoding="utf-8"?> 
06-20 15:15:40.804: I/RESPONSE(2270): <CarObject> 
06-20 15:15:40.804: I/RESPONSE(2270): <ResultCode>0</ResultCode> 
06-20 15:15:40.804: I/RESPONSE(2270): <ResultMessage>success</ResultMessage> 
06-20 15:15:40.804: I/RESPONSE(2270): <Cardata xsi:type="ArrayOfCarStatus"> 
06-20 15:15:40.804: I/RESPONSE(2270):  <CarStatus> 
06-20 15:15:40.804: I/RESPONSE(2270):  <CarID>241</CarID> 
06-20 15:15:40.804: I/RESPONSE(2270):  <CarName>ASC</CarName> 
06-20 15:15:40.804: I/RESPONSE(2270):  </CarStatus> 
06-20 15:15:40.804: I/RESPONSE(2270): </CarData> 
06-20 15:15:40.804: I/RESPONSE(2270): </CarObject> 

這裏就是我有問題的代碼。

private CarStatus readCarStatus(XmlPullParser parser) 
      throws XmlPullParserException, IOException { 

     parser.require(XmlPullParser.START_TAG, ns, "CarStatus"); 
     String carId = null; 
     String carName = null; 

     while (parser.next() != XmlPullParser.END_TAG) { 
      if (parser.getEventType() != XmlPullParser.START_TAG) { 
       continue; 
      } 

      String name = parser.getName(); 
      if (name.equals("CarID")) { 
       carId = readCarId(parser); 
      } else if (name.equals("CarName")) { 
       carName = readCarName(parser); 
      } else { 
       skip(parser); 
      } 
     } 
     return new CarStatus(carId, carName); 
    } 

06-20 16:56:15.773: W/System.err(4017): org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}CarStatus (position:START_TAG <ResultObject >@2:146 in [email protected]) 
06-20 16:56:15.773: W/System.err(4017):  at org.kxml2.io.KXmlParser.require(KXmlParser.java:2046) 
06-20 16:56:15.773: W/System.err(4017):  at com.bentseytlin.maps.MainActivity.readCarStatus(MainActivity.java:174) 
06-20 16:56:15.773: W/System.err(4017):  at com.bentseytlin.maps.MainActivity.parse(MainActivity.java:143) 
06-20 16:56:15.773: W/System.err(4017):  at com.bentseytlin.maps.MainActivity.onCreate(MainActivity.java:88) 
06-20 16:56:15.773: W/System.err(4017):  at android.app.Activity.performCreate(Activity.java:5104) 
06-20 16:56:15.780: W/System.err(4017):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
06-20 16:56:15.780: W/System.err(4017):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
06-20 16:56:15.780: W/System.err(4017):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
06-20 16:56:15.780: W/System.err(4017):  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3692) 
06-20 16:56:15.780: W/System.err(4017):  at android.app.ActivityThread.access$700(ActivityThread.java:141) 
06-20 16:56:15.780: W/System.err(4017):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1240) 
06-20 16:56:15.780: W/System.err(4017):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-20 16:56:15.780: W/System.err(4017):  at android.os.Looper.loop(Looper.java:137) 
06-20 16:56:15.780: W/System.err(4017):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
06-20 16:56:15.780: W/System.err(4017):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-20 16:56:15.780: W/System.err(4017):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-20 16:56:15.780: W/System.err(4017):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
06-20 16:56:15.780: W/System.err(4017):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
06-20 16:56:15.780: W/System.err(4017):  at dalvik.system.NativeStart.main(Native Method) 

感謝您的幫助!

+0

什麼是'汽車'在''之後?我認爲你的XML輸入是不正確的。 – Qben

+0

對不起,我不知道那是怎麼到的。 XML文件絕對不是問題! – benzabill

+0

也許你可以跳過require調用,並在[this]中執行它(http://stackoverflow.com/questions/15187607/android-xmlpullparser-how-to-parse-this-xml-sample-file)線程? – Qben

回答

0

我認爲您錯誤地使用require。當START_TAG等於<CarStatus>時,我得到了你想告訴你的感覺。但是在每次失敗的檢查中,require方法都會拋出一個異常,這意味着你必須添加一個try-catch塊並且這個循環會有點奇怪。有關更多信息,請參閱android doc

我個人不會使用reqiure,而是像我在上面的評論(this thread)中寫的。但我必須承認,我在相當一段時間內還沒有這樣做。 :-)