在Android中读取XML文件

时间:2012-01-05 14:54:53

标签: java android xml android-xml readfile

我有一个questions.xml文件,其中包含我的测验问题列表,我正在尝试将其读入我的程序中的问题库。我写了以下方法:

// Creates the QuestionBank according to user requirements
public ArrayList<Question> createQuestionBank(String diff) {
    int eventType = -1;
    boolean FoundQuestions = false;
    QuestionBank = new ArrayList<Question>();

    // Find Question records from XML
    System.out.println("check 1");
    while (eventType != XmlResourceParser.END_DOCUMENT) {   // Keep reading until the end of the xml file
        System.out.println("check 2");
        if (eventType == XmlResourceParser.START_TAG) { 
            System.out.println("check 3");
            String Name = questionList.getName();
            if (Name.equals("question")){   // Check whether the tag found is the one for question
                System.out.println("check 4");
                // Check difficulty of question
                String diffCheck = questionList.getAttributeValue(null, "difficulty");
                if (diff.equals("Any") || diff.equals(diffCheck)){
                    FoundQuestions = true;
                    System.out.println("check 5");
                    createandaddquestion();
                    System.out.println("check 6");
                }
            }
            try {
                eventType = questionList.next();
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    return QuestionBank;
}

我设置了一些输出语句来识别我的程序出错的地方。该方法输出一个无限循环的check2,并且从不进行检查3,因此卡在语句中:

if (eventType == XmlResourceParser.START_TAG) 

我已经调整了一些我在其他地方找到的代码,但并不完全了解正在发生的事情。我的理解是,这个语句找到了一个标记的开始部分,然后我逐步检查这是否是表示我的问题条目开始的问号标签;究竟是什么eventType?显然它是一个整数,但为什么XMLResourceParser.START_TAG在找到标记时返回一个整数?当然,做一个布尔值会更有意义吗?从上面的帖子我不认为我需要强调我对android很新,所以请耐心等待!提前致谢。

3 个答案:

答案 0 :(得分:4)

在我看来,eventType永远不会得到更新。我对XML解析的具体细节知之甚少,但似乎需要更新eventType,否则你将陷入无限循环,因为你当前被卡住了。我猜你从你的代码中想要将这段代码放在一组括号中来推测:

        try {
            eventType = questionList.next();
        } catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

这将确保在while()命令的每个循环期间调用它。

答案 1 :(得分:1)

答案 2 :(得分:0)

您可能会发现Xerces2 API也很有用。它实现了SAX和DOM解析。 http://xerces.apache.org/xerces2-j/