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

时间:2014-03-18 15:43:12

标签: 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>
    <choice answer="true">George Washington</choice>
    <choice>Thomas Jefferson</choice>
    <choice>James Monroe</choice>
    <choice>John Adams</choice>
</choices>
</question>

我可以解析所有其他内容,但我只能解析最后一个“选择”

这是解析

代码的一部分
public void endElement(String uri, String localName, String qName)
                throws SAXException {
            if(localName.equals("text")){
                question.setText(xmlInnerText.toString().trim());
            } else if(localName.equals("image")){
                question.setImageURL(xmlInnerText.toString().trim());
            } else if(localName.equals("choices")){
                if(localName.equals("choice")){
                question.setChoice(xmlInnerText.toString().trim());
                }
            } else if(localName.equals("question")){
                questions.add(question);
            } 
            xmlInnerText.setLength(0);
        }

1 个答案:

答案 0 :(得分:1)

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

您必须将每个选项添加到列表中,然后question.setChoices(choices)其中choices是列表。 (当你得到一个&#34;选择&#34;你做choices.add(xmlInnetText.toString().trim());

编辑:同时@rmlan表示,您似乎无法选择&#34;选择&#34;。你不需要在&#34;选择中做if&#34; if。 &#34;选择&#34; if可以与其他if处于同一级别。除了这个事实,上面的答案是正确的:你需要一个List来保存每个&#34;选择&#34;。

<强> EDIT2

你需要这样的东西:

(...)

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


(...)