正在使用 XmlPullParser 为特定标记解析 XML?

Parsing XML using XmlPullParser for specific tags?

嘿,我刚刚开始在 android 中进行 XML 解析。我在工作 在 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>

现在,在我的第一个 class 中,我只想显示一个列表视图,其中 提到了一个 sura 的名字,我已经成功地使用了它 代码。

 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 中,现在只显示 sura 的名称,我想显示用户将单击的特定 sura 的 aya 标签。 在我的下一个 activity 中,我将使用此代码

 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 标签属性,而不是特定的 sura。请帮助我获取用户将单击的特定标签上存在的那些 aya。我刚刚在 xml 中发布了 2 个 sura 标签,实际上我有 114 个,所以请帮助我使用正确的代码。对不起,我的英语不好。帮帮我吧。谢谢:(

如果你想在给定的 sura 中获取所有 aya 标签,那么你应该编写一个将 sura index 作为输入的方法,例如 113 或 114 和 return 所有 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;
}