سؤال

لدي واحدة 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 ملف للحصول على قائمة فقط للطلاب ?

هل كانت مفيدة؟

المحلول

عندما تواجه علامة بداية تتطابق مع "طالب" ، قم بتعيين بعض المتغيرات المنطقية (تسمى InsidEstudent على سبيل المثال) إلى True. وبالمثل ، عندما تصادف علامة "درجة" ، قم بتعيين متغير آخر من InsidedEgree إلى True. عندما يكون لديك علامة إغلاق ، اضبطها على خطأ (على سبيل المثال إذا كان لديك </student> ثم قمت بتعيين insidestudent على خطأ). الآن عندما تواجه علامة معرف ، تحتاج فقط إلى التحقق مما إذا كنت داخل الطالب أو داخل كل من الدرجة والطالب. شيء مثل:

if(tag_name.equalsIgnoreCase("ID")){
    // Get student ID
    if (insideStudent && !insideDegree) {
          stud_id = parser.nextText().toString();
          Log.i("Id = ", pid);
    }
} 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top