Android - Pull Parser

У меня есть один 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 ответ

Решение

Когда вы встречаете начальный тег, соответствующий "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);
    }
} 
Другие вопросы по тегам