Android - Tire Analizador
-
02-10-2019 - |
Pregunta
Estoy teniendo un archivo xml
y quiero analizarlo para obtener Student-ID y los nombres de los estudiantes-solamente.
<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>
Código:
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;
}
}
Mi Problema
Cuando estoy analizar el archivo XML
utilizando el código anterior, que estoy recibiendo tanto la IDs
(es decir student-id
, degree-id
), por lo que Uso de Pull-analizador, ¿qué camino he analizar el archivo XML
obtener la lista de único estudiante-id`
Solución
Cuando se encuentre con una etiqueta a juego "estudiante" de partida, establecida alguna variable booleana (llamado insideStudent por ejemplo) a la verdadera. Del mismo modo, cuando se encuentra con una etiqueta de "grado" establece otra variable insideDegree true. Cuando usted tiene una etiqueta de cierre, que se pone a falso (por ejemplo, si usted tiene </student>
entonces establecer insideStudent a falso). Ahora, cuando se encuentra con una etiqueta de identificación, sólo tiene que comprobar si estás sólo en el interior del estudiante o en el interior tanto de grado y el estudiante. Algo así como:
if(tag_name.equalsIgnoreCase("ID")){
// Get student ID
if (insideStudent && !insideDegree) {
stud_id = parser.nextText().toString();
Log.i("Id = ", pid);
}
}