سؤال

أقوم بتحليل مخطط XML بسيط للغاية مع محلل ساكس في Android.

سيكون ملف مثال

<Lists>
<List name="foo">
<Note title="note 1" .../>
<Note title="note 2" .../>
</List>
<List name="bar">
<Note title="note 3" .../>
</List>
</Lists>

يمثل ... المزيد من بيانات الملاحظات كسمات ليست مهمة للتساؤل.

يمكنني استخدام محلل ساكس لتحليل المستند وتنفيذ فقط startElement و "endlement" أساليب المعالج للتعامل مع العقد الملاحظة وسرد.

ومع ذلك ، في بعض الحالات ، يمكن أن تكون الملفات كبيرة جدًا وتستغرق بعض الوقت للمعالجة. أود أن أكون قادرًا على إحباط عملية التحليل في أي وقت (على سبيل المثال يضغط المستخدم على زر إلغاء).

أفضل طريقة توصلت إليها هي رمي استثناء من طريقة النشر الخاصة بي عندما يتم استيفاء شروط معينة (أي boolean stopParsing صحيح).

هل هناك طريقة أفضل للقيام بذلك؟

لقد استخدمت دائمًا محللات DOM على نمط DOM ، لذلك لا أفهم تمامًا Sax Parser.

ملاحظة أخيرة ، أنا أقوم بتشغيل هذا على Android ، لذلك سيكون لديّ المحلل العاملة على موضوع عامل للحفاظ على مستجيب واجهة المستخدم. إذا كنت تعرف كيف يمكنني قتل الخيط بأمان أثناء تشغيل المحلل الذي سيجيب على سؤالي أيضًا.

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

المحلول

قد ترغب في النظر في xmlpullparser حيث يمكن القيام بذلك بسهولة من خلال عدم الاتصال بالطريقة التالية. أنت في مزيد من السيطرة على التحليل.

XmlPullParser xpp=getResources().getXml(R.xml.lists);
while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) {
    if (xpp.getEventType()==XmlPullParser.START_TAG) {
        if (xpp.getName().equals("list")) {
            items.add(xpp.getAttributeValue(0));
        }
    }

    xpp.next();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top