Java 使用Sax解析具有相同标记的XML元素

Java 使用Sax解析具有相同标记的XML元素,java,xml,xml-parsing,sax,Java,Xml,Xml Parsing,Sax,大家好,当我试图解析具有相同标记的xml元素时,我遇到了一个问题 <question id="0"> <text> Who is the first President of the United States of America? </text> <image> http://liisp.uncc.edu/~mshehab/api/figures/georgewashington.png </image> <choices&g

大家好,当我试图解析具有相同标记的xml元素时,我遇到了一个问题

<question id="0">
<text> Who is the first President of the United States of America? </text>
<image> http://liisp.uncc.edu/~mshehab/api/figures/georgewashington.png </image>
<choices>
    <choice answer="true">George Washington</choice>
    <choice>Thomas Jefferson</choice>
    <choice>James Monroe</choice>
    <choice>John Adams</choice>
</choices>
</question>

我猜现在发生的事情是,你正在设置选择,但是你再次设置它(替换它)。所以你只能得到最后一个

您必须将每个选项添加到列表中,然后
question.setChoices(choices)
其中
choices
是一个列表。(当您得到一个“选项”时,您需要执行
choices.add(xmlinettext.toString().trim());

编辑:正如@rmlan所说,你似乎永远都不会有“选择”。你不需要在“选择”
if
“选择”
if
“选择”
if
与其他的
if
处于同一级别。抛开这个事实,上面的答案是正确的:你需要一个列表来保存每个“选择”

Edit2

你需要这样的东西:

(...)

} else if(localName.equals("choice")) {
    choices.add(setChoice(xmlInnerText.toString().trim());
} else if(localName.equals("choices")){
    question.setChoices(choices);
}                


(...)

你的逻辑似乎不正确。如果localName等于“choices”,它怎么可能也等于child If语句中的“choice”?那么,所有的选项都在“choices”下面,我不需要另一个If来表示“choice”来获取字符串吗?@Samson我只能在这里回答:你不需要If来表示“choice”,因为“choice”在“choices”中“。如果在不同的标记下有“choice”,则需要额外的验证,即:和inside和inside。因此,我只需执行“choices”即可将字符串放入“choice”中?不。您还需要执行
if(localName.equals(“choice”){question.setChoice(xmlInnerText.toString().trim();}
,但不在“选项”
if
。此外,正如我所说,您需要将每个选项保存在列表中。编辑:我用一些代码编辑了我的答案。
(...)

} else if(localName.equals("choice")) {
    choices.add(setChoice(xmlInnerText.toString().trim());
} else if(localName.equals("choices")){
    question.setChoices(choices);
}                


(...)