Android - Pull Parser - PullRequest
       24

Android - Pull Parser

2 голосов
/ 11 сентября 2010

У меня есть один xml файл, и я хочу проанализировать его, чтобы получить только идентификаторы учеников и имена учеников.

<students>
    <student>
         <id type="integer">101</id>
         <name>James</name>
         <degree>
             <id type="integer">1978271</id>
             <name>SCJP</name>
         </degree>
    </student>
    <student>
         <id type="integer">102</id>
         <name>Joseph</name>
         <degree>
             <id type="integer">1978272</id>
             <name>MCST</name>
         </degree>
    </student>
</students>

Код:

while (eventType != XmlPullParser.END_DOCUMENT) {
    parser.next();
    eventType = parser.getEventType();
    switch (eventType){
    case XmlPullParser.START_TAG:   
         tag_name = parser.getName();
         if(tag_name.equalsIgnoreCase("ID")){
              stud_id = parser.nextText().toString();
              Log.i("Id = ", pid);
          } else if (tag_name.equalsIgnoreCase("name")){
              stud_name = parser.nextText().toString();
          } 
          break;
     }
} 

Моя проблема : Когда я анализирую файл XML, используя приведенный выше код, я получаю оба IDs (т.е. student-id, degree-id), поэтому Используя Pull-parser, каким образом мне следует проанализировать файл XML, чтобы получить список только Student-id` ?

1 Ответ

2 голосов
/ 11 сентября 2010

Когда вы сталкиваетесь с начальным тегом, совпадающим с «student», установите для некоторой логической переменной (например, называемой insideStudent) значение true.Точно так же, когда вы встречаете тэг "Степень", установите для другой переменной insideDegree значение true.Если у вас есть закрывающий тег, установите для него значение false (например, если у вас есть </student>, тогда вы установили insideStudent на false).Теперь, когда вы сталкиваетесь с тегом ID, вам просто нужно проверить, находитесь ли вы только внутри студента или внутри и степени, и студента.Что-то вроде:

if(tag_name.equalsIgnoreCase("ID")){
    // Get student ID
    if (insideStudent && !insideDegree) {
          stud_id = parser.nextText().toString();
          Log.i("Id = ", pid);
    }
} 
...