【问题标题】:Parsing Indexed XML in Android在 Android 中解析索引 XML
【发布时间】:2013-05-07 11:27:37
【问题描述】:

如何解析本地 XML 文件以便能够将其字符串值放入 TextView.setText(String) 方法中?我的本地 XML 文件如下所示:

<quran>
<sura index="1" name="الفاتحة">
    <aya index="1" text="In the name of Allah, the Entirely Merciful, the Especially Merciful."/>
    <aya index="2" text="[All] praise is [due] to Allah, Lord of the worlds -"/>
    <aya index="3" text="The Entirely Merciful, the Especially Merciful,"/>
    <aya index="4" text="Sovereign of the Day of Recompense."/>
    <aya index="5" text="It is You we worship and You we ask for help."/>
    <aya index="6" text="Guide us to the straight path -"/>
    <aya index="7" text="The path of those upon whom You have bestowed favor, not of those who have evoked [Your] anger or of those who are astray."/>
</sura>
<sura index="2" name="البقرة">
    <aya index="1" text="Alif, Lam, Meem."/>
    <aya index="2" text="This is the Book about which there is no doubt, a guidance for those conscious of Allah -"/>
    <aya index="3" text="Who believe in the unseen, establish prayer, and spend out of what We have provided for them,"/>
    <aya index="4" text="And who believe in what has been revealed to you, [O Muhammad], and what was revealed before you, and of the Hereafter they are certain [in faith]."/>
    <aya index="5" text="Those are upon [right] guidance from their Lord, and it is those who are the successful."/>

我希望能够访问位于特定 ayh 索引号的特定 text 字符串,但我不知道该怎么做,因为对于 sura 对象中的每个 aya 对象,有两件事,我要访问的索引和文本。请帮忙!

【问题讨论】:

  • 知道我是如何专门为这个文件或一个好的教程做的吗?我需要能够一次访问一个字符串,有点像搜索。用户输入位置,那里的字符串被放置在 TextView 中。
  • 我喜欢this tutorial。它会检查所有常见的解析器并比较它们,以便您知道哪个是适合您的。

标签: android xml parsing


【解决方案1】:

如果您确实想按照 Harsh 的建议使用 XmlPullParser,请查看 [docs][1] 中的类概述中给出的示例。

你想要的是“aya”元素中的“text”属性,所以你应该使用方法XmlPullParser.getAttributeValue(null, "text"),如下:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();

xpp.setInput( new StringReader ( "<quran><sura index=\"1\" name=\"الفاتحة\"><aya index=\"1\" text=\"In the name of Allah, the Entirely Merciful, the Especially Merciful.\"/><aya index=\"2\" text=\"[All] praise is [due] to Allah, Lord of the worlds -\"/><aya index=\"3\" text=\"The Entirely Merciful, the Especially Merciful,\"/><aya index=\"4\" text=\"Sovereign of the Day of Recompense.\"/><aya index=\"5\" text=\"It is You we worship and You we ask for help.\"/><aya index=\"6\" text=\"Guide us to the straight path -\"/><aya index=\"7\" text=\"The path of those upon whom You have bestowed favor, not of those who have evoked [Your] anger or of those who are astray.\"/></sura><sura index=\"2\" name=\"البقرة\"><aya index=\"1\" text=\"Alif, Lam, Meem.\"/><aya index=\"2\" text=\"This is the Book about which there is no doubt, a guidance for those conscious of Allah -\"/><aya index=\"3\" text=\"Who believe in the unseen, establish prayer, and spend out of what We have provided for them,\"/><aya index=\"4\" text=\"And who believe in what has been revealed to you, [O Muhammad], and what was revealed before you, and of the Hereafter they are certain [in faith].\"/><aya index=\"5\" text=\"Those are upon [right] guidance from their Lord, and it is those who are the successful.\"/></sura></quran>" ) );
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
    if(eventType == XmlPullParser.START_DOCUMENT) {
        Log.i(getClass().getName(), "Start document");
    } else if(eventType == XmlPullParser.START_TAG) {
        Log.i(getClass().getName(), "Start tag "+xpp.getName());
        if(xpp.getName().equals("aya")){
            Log.i(getClass().getName(), "aya text: " + xpp.getAttributeValue(null, "text"));
        }
    } else if(eventType == XmlPullParser.END_TAG) {
        System.out.println("End tag "+xpp.getName());
        Log.i(getClass().getName(), "End tag "+xpp.getName());
    } else if(eventType == XmlPullParser.TEXT) {
        System.out.println("Text "+xpp.getText());
        Log.i(getClass().getName(), "Text "+xpp.getText());
    }
    eventType = xpp.next();
}
Log.i(getClass().getName(), "End document");

【讨论】:

  • 谢谢!您的解决方案帮助我实现了目标!抱歉已经离开“很长时间”了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
相关资源
最近更新 更多