首页 > 解决方案 > 使用 XmlPullParser 为特定标签解析 XML?

问题描述

嘿,我刚刚开始在 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>

现在在我的第一堂课中,我只想显示一个列表视图,其中只提到了一个 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 标签。在我的下一个活动中,我正在使用此代码

 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 个,所以请帮助我使用正确的代码。对不起,我英语不好。帮帮我吧。谢谢 :(

标签: androidxml-parsingxmlpullparser

解决方案


如果您想获取ayagiven 中的所有标签sura,那么您应该编写一个方法,将sura index113 或 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;
}

推荐阅读