2014-07-16 2 views
1

이 XML을 고려하십시오. 그것은 그들이 소유하고있는 사람들과 자동차 목록을 설명합니다. XmlPullParser - 특정 부모 요소가있는 요소에서 당기기

<People> 
    <Person id="100"> 
     <Name>Bob</Name> 
     <Cars> 
      <Car> 
       <Make>Toyota</Make> 
       <Model>Celica</Model> 
      </Car> 
     </Cars> 
    </Person> 
    <Person id="101"> 
     <Name>Jim</Name> 
     <Cars> 
      <Car> 
       <Make>Ford</Make> 
       <Model>Pinto</Model> 
      </Car> 
      <Car> 
       <Make>Dodge</Make> 
       <Model>Viper</Model> 
      </Car> 
     </Cars> 
    </Person> 
</People> 

은 이미 통과 잡아하는 파서를 만들었습니다

ID: 100, Name: Bob 
ID: 101, Name: Jim 

하지만이 내려 휴식하고 특정 부모의 자녀 중첩 된 요소를 잡기 위해 고군분투하고있다.

while (eventType != XmlPullParser.END_DOCUMENT) { 
    String name = null; 
    switch (eventType) { 
     case XmlPullParser.START_DOCUMENT: 
      // do something 
      break;      
     case XmlPullParser.START_TAG:        
      name = parser.getName(); 
      if (name.equalsIgnoreCase("Cars")) {      

       // how do i restrict this to only cars under person with ID 101? 

      } 

짐만 짐이 어떤 종류인지 알고 싶다고합시다. Jim의 ID는 101이지만 부모 Person 요소의 id101 일 때 XmlPullParser 루프가 Cars 요소 만 보도록 제한하려면 어떻게해야합니까?

답변

3

당신은 파서가 예를 들어, 현재 위치를 알고 플래그를 사용할 수 있습니다 : 바른 길에 나를 넣어

boolean personFound = false; 
boolean carsFound = false; 
while (eventType != XmlPullParser.END_DOCUMENT) { 
    if (XmlPullParser.START_TAG && parser.getName().equals("Person") && parser.getAttributeValue(0).equals("101")) { 
     personFound = true; 
    } 
    if (personFound && XmlPullParser.START_TAG && parser.getName().equals("Cars")){ 
     carsFound = true 
    } 
    if (carsFound) { 
     // Do something useful 
    } 
    if (carsFound && XmlPullParser.END_TAG && parser.getName().equals("Cars"){ 
     break; 
    } 
    eventType = parser.next(); 
} 
+0

이 - 감사합니다! 이런 식으로 중첩 된 요소를 처리하는 올바른 방법입니까 아니면 원래 게시물에 올린 코드와 함께 작동하게하는 간단한 방법일까요? – user1003916

+0

@ user1003916 아니요, 단순한 해결 방법이 아닙니다. 태그로 XML 태그를 읽으므로 필요한 부분에 도달 할 때까지 반복해야합니다. 바로 이동할 수 없습니다. – cy3er