Android - سحب المحلل
-
02-10-2019 - |
سؤال
لدي واحدة 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);
}
}