2013-06-20 1 views
1

XML 파일을 구문 분석하려고하지만 문서와 관련하여 문제가 있습니다. 내가 대신 START_TAG null이 무엇입니까,XmlPullParser가 START_TAG 대신 null이 됨

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

을하지만 :

나는이 라인에 문제가 발생하고있다.

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)에 쓴 것처럼 사용합니다. 그러나 나는 이것을 꽤 오랫동안하지 않았다는 것을 인정해야한다. :-)