Разбор XML с использованием XmlPullParser для конкретных тегов? - PullRequest
0 голосов
/ 21 февраля 2019

Эй, я только начал работать над анализом XML в Android.Я работаю над XML, который имеет такую ​​структуру.

        <quran>
        <sura index="113" name="الفلق">
                <aya index="1" text="قُلْ أَعُوذُ بِرَبِّ الْفَلَقِ" bismillah="بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ" />
                <aya index="2" text="مِنْ شَرِّ مَا خَلَقَ" />
                <aya index="3" text="وَمِنْ شَرِّ غَاسِقٍ إِذَا وَقَبَ" />
                <aya index="4" text="وَمِنْ شَرِّ النَّفَّاثَاتِ فِي الْعُقَدِ" />
                <aya index="5" text="وَمِنْ شَرِّ حَاسِدٍ إِذَا حَسَدَ" />
            </sura>
            <sura index="114" name="الناس">
                <aya index="1" text="قُلْ أَعُوذُ بِرَبِّ النَّاسِ" bismillah="بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ" />
                <aya index="2" text="مَلِكِ النَّاسِ" />
                <aya index="3" text="إِلَهِ النَّاسِ" />
                <aya index="4" text="مِنْ شَرِّ الْوَسْوَاسِ الْخَنَّاسِ" />
                <aya index="5" text="الَّذِي يُوَسْوِسُ فِي صُدُورِ النَّاسِ" />
                <aya index="6" text="مِنَ الْجِنَّةِ وَالنَّاسِ" />
            </sura>
        </quran>

Теперь в моем первом классе я просто хочу показать представление списка, в котором упоминается только имя суры, которое я успешно выполнил, используяэтот код.

 XmlPullParser parser = getResources().getXml(R.xml.quran_arabic);

        while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
            if (parser.getEventType() == XmlPullParser.START_TAG && parser.getName().equals("sura")) {
                list.add(parser.getAttributeValue(0) + ".\n" + parser.getAttributeValue(1));
            }
            parser.next();
        }

В моем lisview отображается только имя суры, теперь я хочу показать теги aya определенной суры, по которым пользователь нажимает.В своем следующем задании я использую этот код

 XmlPullParser parser = getResources().getXml(R.xml.quran_arabic);

        while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
            if (parser.getEventType() == XmlPullParser.START_TAG && parser.getName().equals("aya")) {
                list.add(parser.getAttributeValue(0) + ".\n" + parser.getAttributeValue(1));
            }
            parser.next();
        }

Но я получаю все атрибуты тегов aya вместо определенных сур.Пожалуйста, помогите мне получить только те ая, которые присутствуют в определенном теге, по которому пользователь нажимает.Я только что опубликовал 2 тега суры в XML на самом деле у меня 114, поэтому, пожалуйста, помогите мне использовать правильный код.Извините, я плохо знаю английский.Просто помоги мне.Спасибо: (

1 Ответ

0 голосов
/ 22 февраля 2019

Если вы хотите получить все теги aya внутри данного sura, то вы должны написать метод, который принимает sura index в качестве входных данных, например, 113 или 114, и возвращает все теги aya в качестве выходных.

private List<String> getAllAyaFromSuraIndex(String suraIndex) {
    List<String> list = new ArrayList<>();

    XmlPullParser parser = getResources().getXml(R.xml.quran_arabic);
    while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
        if (parser.getEventType() == XmlPullParser.START_TAG && parser.getName().equals("sura")) {
            String index = parser.getAttributeValue(0);

            // Match given sure index
            if (index.equals(suraIndex)) {
                // Move to first aya tag inside matched sura index
                parser.next();

                // This loop will exit when it reaches sura end tag </sura>
                while (parser.getName().equals("aya")) {
                    if (parser.getEventType() == XmlPullParser.START_TAG) {
                        list.add(parser.getAttributeValue(0) + ".\n" + parser.getAttributeValue(1));
                    }

                    // Move to next aya tag
                    parser.next();
                }

                break;
            }
        }

        parser.next();
    }

    return list;
}
...