android - 如何从 XML 文件中选择特定元素?

标签 android xml

我为我的 child 制作了一个小测试程序。我想学他的数学。 面临从XML文件中读取题目的问题

<?xml version="1.0" encoding="utf-8"?>
    <questions>
    <question>
        <vopros>How much will 2+2?</vopros>
        <otvet_1>2</otvet_1>
        <otvet_2>6</otvet_2>
        <otvet_3>8</otvet_3>
        <otvet_4  name="pravilno">4</otvet_4>
    </question>
    <question>
        <vopros>How much will 3+3?</vopros>
        <otvet_1>12</otvet_1>
        <otvet_2>16</otvet_2>
        <otvet_3>18</otvet_3>
        <otvet_4  name="pravilno">6</otvet_4>
    </question>
    <question>
        <vopros>How much is 4+4?</vopros>
        <otvet_1>22</otvet_1>
        <otvet_2>26</otvet_2>
        <otvet_3>18</otvet_3>
        <otvet_4  name="pravilno">8</otvet_4>
    </question>
    <question>
        <vopros>How much is 5+5?</vopros>
        <otvet_1>2</otvet_1>
        <otvet_2>6</otvet_2>
        <otvet_3>8</otvet_3>
        <otvet_4  name="pravilno">10</otvet_4>
    </question>
</questions>

我需要激活 vopros3 和答案选项(otvet_1、otvet_2、otvet_3、otvet_4)

从 XML 文件中检索数据的 Java 代码

try {
    XmlPullParser parser = getResources().getXml(R.xml.voprosi);

    while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
        if (parser.getEventType() == XmlPullParser.START_TAG
                && parser.getName().equals("question")) {

            if(numvopr==3)
            {
                // ....... here it is necessary to withdraw a question and answers

                Question.setText(...);
                answ1.setText(...);
                answ2.setText(...);
                answ3.setText(...);
                answ4.setText(...);
            }
            numvopr++;
        }
        parser.next();
    }
} catch (Throwable t) {
    Toast.makeText(this,
            "XML Error: " + t.toString(),
            Toast.LENGTH_LONG).show();
}

最佳答案

作为状态机实现的一种方法:

String lastStartTag = "";

// change to desired question - 0-based
int targetQuestion = 3;

while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {

    // Count questions and record every START tag
    if (parser.getEventType() == XmlPullParser.START_TAG) {
        lastStartTag = parser.getName();
        if (parser.getName().equals("question")) {
            numvopr++;
        }
    }

    // Process text based on whether we are at desired question
    // and last processed START tag.
    else if (parser.getEventType() == XmlPullParser.TEXT) {

        if (numvopr == targetQuestion) {

            if (lastStartTag.compareTo("vopros") == 0) {
                Question.setText(parser.getText());
            }

            else if (lastStartTag.compareTo("otvet_1") == 0) {
                answ1.setText(parser.getText());
            }
            else if (lastStartTag.compareTo("otvet_2") == 0) {
                answ2.setText(parser.getText());
            }
            else if (lastStartTag.compareTo("otvet_3") == 0) {
                answ3.setText(parser.getText());
            }
            else if (lastStartTag.compareTo("otvet_4") == 0) {
                answ4.setText(parser.getText());
            }
        }
    }

    parser.next();
}

关于android - 如何从 XML 文件中选择特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55341307/

相关文章:

android - 应用程序更新时文件会被删除吗?

android - 实时图像处理Android camera2 api

c# - 使用 linq 或 xpath 获取 xml 中的所有文本节点

java - 如何告诉 JAXB 在运行时序列化哪些字段?

java - Android:为谷歌地图设置 API key

java - 屏幕旋转期间 textview 背景颜色丢失

java - map 无法放大

java - Realm.io - 在 Android 之外使用(在 Java 中)

android - 为每条记录重复一个复杂的Layout

xml - 用于选择下拉列表中第一个元素的 XPath