Android - Pull Parser
-
02-10-2019 - |
Frage
Ich habe eine xml
Datei und ich möchte analysieren es Schüler-IDs und Schüler-Namen zu bekommen nur.
<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>
Code:
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;
}
}
Mein Problem :
Wenn ich die XML
Datei bin Parsen des obigen Code, ich bin beides immer die IDs
(dh student-id
, degree-id
), so Mit Pull-Parser, die Art und Weise, ich sollte die XML
Datei zu erhalten Liste von nur Schüler-id`
Lösung
Wenn Sie ein Start-Tag matching "Student" begegnen, setzen einige boolean Variable auf true (insideStudent zum Beispiel genannt). Ebenso, wenn Sie setzen andere insideDegree Variable auf true ein „Grad“ Tag begegnen. Wenn Sie ein End-Tag haben, setzen sie auf false (z, wenn Sie </student>
haben, dann setzen Sie insideStudent auf false). Nun, wenn Sie einen ID-Tag begegnen, müssen Sie nur überprüfen, ob Sie nur innerhalb Student sind oder in beiden Grad und Schüler. So etwas wie:
if(tag_name.equalsIgnoreCase("ID")){
// Get student ID
if (insideStudent && !insideDegree) {
stud_id = parser.nextText().toString();
Log.i("Id = ", pid);
}
}