Android - Pull Parser
-
02-10-2019 - |
Domanda
io sto avendo un unico file xml
e voglio analizzarlo per ottenere Student-ID e studenti-nomi solo.
<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>
Codice:
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;
}
}
Il mio problema :
Quando sto l'analisi del file XML
utilizzando il codice di cui sopra, sto ottenendo sia il IDs
(cioè student-id
, degree-id
), in modo da Uso Pull-parser, in che modo avrei dovuto analizzare il file XML
ottenere l'elenco di un solo studente-id`
Soluzione
Quando si incontra un tag corrispondente "studente" di partenza, impostare una variabile booleana (chiamata insideStudent per esempio) su true. Allo stesso modo, quando si incontra un tag "grado" impostare un'altra variabile insideDegree su true. Quando si dispone di un tag di chiusura, li impostato su false (ad esempio, se si dispone di </student>
allora impostare insideStudent false). Ora, quando si incontra un tag ID, è sufficiente verificare se si è solo all'interno studente o all'interno sia di grado e studente. Qualcosa di simile:
if(tag_name.equalsIgnoreCase("ID")){
// Get student ID
if (insideStudent && !insideDegree) {
stud_id = parser.nextText().toString();
Log.i("Id = ", pid);
}
}