Разобрать элемент XML с тем же тегом, используя Sax

1

Привет, ребята, у меня проблема, когда я пытаюсь разобрать элемент 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);
        }
Теги:
xml-parsing
sax

1 ответ

1
Лучший ответ

Я предполагаю, что сейчас происходит то, что вы устанавливаете выбор, но затем вы снова устанавливаете его (заменяете его). Таким образом, вы получаете только последнее.

Вы должны добавить каждый выбор в список, а затем question.setChoices(choices) где choices является списком. (Когда вы получаете "выбор", вы делаете choices.add(xmlInnetText.toString().trim());

Редактировать: также как @rmlan сказал, что, похоже, вы никогда не доберетесь до "выбора". Вам не нужно делать, if внутри "выборов", if. "Выбор", if может быть на том же уровне, что и другие, if s. Помимо этого факта ответ выше истины: вам нужен Список, чтобы сохранить каждый "выбор".

Редактировать2:

Вам нужно что-то вроде этого:

(...)

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


(...)
  • 0
    @ Самсон Я могу ответить только здесь: вам не нужно if для «выбора» только потому, что «выбор» находится внутри «выбора». Вам понадобится дополнительная проверка, если у вас есть «выбор» под разными тегами, то есть: <choices> и внутри <choice> и <someOtherTag> и внутри <choice>.
  • 0
    так что мне нужно только сделать «выбор», чтобы получить строку внутри «Выбор»?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню