android - 使用 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 个,所以请帮助我使用正确的代码。对不起,我英语不好。帮帮我吧。谢谢 :(
解决方案
如果您想获取aya
given 中的所有标签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;
}
推荐阅读
- r - 引用传递给函数的参数
- powerbi - Self-Service BI and Compliance
- android - 首次构建空白 Android 应用程序时连接到谷歌失败
- javascript - 为什么我们在 JavaScript 的 EventListener 中调用函数时不使用 ()
- c# - 在 C# 8 中,如何检测不可能的空值检查?
- angular - Firebase 托管和路由 Angular 项目不起作用
- java - 使用 Java 8 Lambas 通过键或值在 JsonArray (javax.json.JsonArray) 中查找 JsonObject
- regex - 用于从 Instagram 标题中解析提到的用户名的正则表达式
- python - seaborn中的多个计数图
- python - 反向 pip 安装“-e”选项