【发布时间】:2016-10-21 16:03:22
【问题描述】:
我正在尝试使用 StAX 读取一个 xml 文档,但我有一个小问题,我不知道如何解决它,我试图通过互联网查找(可能我使用了错误的关键字对于我的问题:/) 所以我有这个 XML:
<questionReponses
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='http://polytis.fr/studentest'
xsi:schemaLocation='http://polytis.fr/studentest qanda.xsd'>
<questionReponse>
<categorie>Biologie</categorie>
<question>Question 1</question>
<reponse>reponse correcte 1</reponse>
<mauvaiseReponse>reponse fausse 1.1</mauvaiseReponse>
<mauvaiseReponse>reponse fausse 1.2</mauvaiseReponse>
<mauvaiseReponse>reponse fausse 1.3</mauvaiseReponse>
</questionReponse>
<questionReponse>
<categorie>Chimie</categorie>
<question>Question 2</question>
<reponse>reponse correcte 2</reponse>
<mauvaiseReponse>reponse fausse 2.1</mauvaiseReponse>
<mauvaiseReponse>reponse fausse 2.2</mauvaiseReponse>
<mauvaiseReponse>reponse fausse 2.3</mauvaiseReponse>
</questionReponse>
<questionReponse>
<categorie>CultureG</categorie>
<question>Question 3</question>
<reponse>reponse correcte 3</reponse>
<mauvaiseReponse>reponse fausse 3.1</mauvaiseReponse>
<mauvaiseReponse>reponse fausse 3.2</mauvaiseReponse>
<mauvaiseReponse>reponse fausse 3.3</mauvaiseReponse>
</questionReponse>
这是我的解析器:
try {
// instanciation du parser
InputStream in = new FileInputStream(nomFichier);
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader parser = factory.createXMLStreamReader(in);
// lecture des evenements
for (int event = parser.next(); event != XMLStreamConstants.END_DOCUMENT; event = parser.next()) {
// traitement selon l'evenement
switch (event) {
case XMLStreamConstants.START_ELEMENT:
break;
case XMLStreamConstants.END_ELEMENT:
if (parser.getLocalName().equals("questionReponse")) {
question = new Question(categorieCourante,questionCourante,bonneReponseCourante,mauvaisesReponses);
quizz.add(question);
}
if (parser.getLocalName().equals("categorie")) {
categorieCourante = donneesCourantes;
}
if (parser.getLocalName().equals("question")) {
questionCourante = donneesCourantes;
}
if (parser.getLocalName().equals("reponse")) {
bonneReponseCourante = donneesCourantes;
}
if (parser.getLocalName().equals("mauvaiseReponse")) {
mauvaisesReponses.add(donneesCourantes);
}
break;
case XMLStreamConstants.CHARACTERS:
donneesCourantes = parser.getText();
break;
} // end switch
} // end for
parser.close();
}
结果不是预期的:
question 1
[categorie =
Biologie
question =
Question 1
bonne reponse =
reponse correcte 1
mauvaises reponse =
reponse fausse 1.1
reponse fausse 1.2
reponse fausse 1.3
reponse fausse 2.1
reponse fausse 2.2
reponse fausse 2.3
reponse fausse 3.1
reponse fausse 3.2
reponse fausse 3.3
, categorie =
Chimie
question =
Question 2
bonne reponse =
reponse correcte 2
mauvaises reponse =
reponse fausse 1.1
reponse fausse 1.2
reponse fausse 1.3
reponse fausse 2.1
reponse fausse 2.2
reponse fausse 2.3
reponse fausse 3.1
reponse fausse 3.2
reponse fausse 3.3
, categorie =
CultureG
question =
Question 3
bonne reponse =
reponse correcte 3
mauvaises reponse =
reponse fausse 1.1
reponse fausse 1.2
reponse fausse 1.3
reponse fausse 2.1
reponse fausse 2.2
reponse fausse 2.3
reponse fausse 3.1
reponse fausse 3.2
reponse fausse 3.3
]
我的 3 个问题也是如此。当我解析“mauvaiseReponse”时,所有“mauvaiseReponse”应答器都会流式传输并添加。
我正在寻找的结果是这样的:
question 1
categorie =
Biologie
question =
Question 1
bonne reponse =
reponse correcte 1
mauvaises reponse =
reponse fausse 1.1
reponse fausse 1.2
reponse fausse 1.3
对不起,如果我的英语不是那么好,我希望你能理解我的问题并帮助我解决这个问题
【问题讨论】: