我有一个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很新,所以请耐心等待!提前致谢。
答案 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/