2

J'ai un fichier xml et je veux l'analyser pour obtenir les identifiants des étudiants et les noms des étudiants seulement.Android - Pull Parser

<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; 
    } 
} 

Mon problème: Quand je suis l'analyse du fichier XML à l'aide du code ci-dessus, je reçois à la fois le IDs (c.-à-student-id, degree-id), donc Utilisation de Pull-parser,de quelle façon je devrais analyser le fichier XML pour obtenir la liste des seuls Student-id`?

Répondre

2

Lorsque vous rencontrez une balise de début correspondant à «étudiant», définissez une variable booléenne (appelée insideStudent par exemple) sur true. De même, lorsque vous rencontrez une balise "degree", définissez une autre variable insideDegree sur true. Lorsque vous avez une balise de fermeture, définissez-la sur false (par exemple, si vous avez </student>, vous définissez insideStudent sur false). Maintenant, quand vous rencontrez une étiquette d'identification, vous avez juste besoin de vérifier si vous êtes seulement à l'intérieur de l'étudiant ou à l'intérieur du degré et de l'étudiant. Quelque chose comme:

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

désolé pour réponse tardive au sujet de votre réponse, et je l'ai déjà fait de cette façon, je déclarai variables entières qui les rend 0 et 1 sur le démarrage/balise de fermeture. Merci pour le soutien –