Protossan
@Protossan
студент

Как выбрать конкретный элемент из XML файла?

Имеется XML файл voprosi.xml
<?xml version="1.0" encoding="utf-8"?>
    <questions>
    <question>
        <vopros>Сколько будет 2+2?</vopros>
        <otvet_1>2</otvet_1>
        <otvet_2>6</otvet_2>
        <otvet_3>8</otvet_3>
        <otvet_4  name="pravilno">4</otvet_4>
    </question>
    <question>
        <vopros>Сколько будет 3+3?</vopros>
        <otvet_1>12</otvet_1>
        <otvet_2>16</otvet_2>
        <otvet_3>18</otvet_3>
        <otvet_4  name="pravilno">6</otvet_4>
    </question>
    <question>
        <vopros>Сколько будет 4+4?</vopros>
        <otvet_1>22</otvet_1>
        <otvet_2>26</otvet_2>
        <otvet_3>18</otvet_3>
        <otvet_4  name="pravilno">8</otvet_4>
    </question>
    <question>
        <vopros>Сколько будет 5+5?</vopros>
        <otvet_1>2</otvet_1>
        <otvet_2>6</otvet_2>
        <otvet_3>8</otvet_3>
        <otvet_4  name="pravilno">10</otvet_4>
    </question>
</questions>

Мне надо вывести в активити Вопрос 3 и варианты ответа

Java код, который получает данные из ХМЛ файла

try {
            XmlPullParser parser = getResources().getXml(R.xml.voprosi);

            while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
                if (parser.getEventType() == XmlPullParser.START_TAG
                        && parser.getName().equals("question")) {
                    
if(numvopr==3)
{

//....... тут надо вывести как-то вопрос и ответы 

 }
                  numvopr++;
                }
                parser.next();
            }


        } catch (Throwable t) {
            Toast.makeText(this,
                    "Ошибка при загрузке XML-документа: " + t.toString(),
                    Toast.LENGTH_LONG).show();
        }


Возможно можно вывести данные так, чтоб не разбирать весь файл а только по номеру элемента?
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
@Dmtm
Android
при большом желании - можно, если перейти к блочной структуре файла,
т.е. когда каждый тег <question> занимает строго N байт (оставшееся можно дополнить пробелами)
тогда нужный блок находится за один шаг: номер блока*N
но в реальном проекте за такое будут бить и не только по рукам -
есть парсер, есть объекты, распарсил - получил, решение ценное своей предсказуемостью и легкостью сопровождения
PS: теги вида<otvet_1>12</otvet_1>лучше больше никому не показывать
вот так будет правильно:
<question id="1" text="Сколько будет 4+4?" > - внесем вопрос в аттрибуты чтобы упростить парсинг
<item id="1" right="true">8</item>
<item id="2" >44</item>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы