Разобрать весь текст XML с помощью XMLPullParser

У меня есть вопрос, похожий на [this one here][1] Я читал руководства по XMLPullParser и, похоже, не понял этого.

У меня есть тег XML, который я хочу проанализировать с помощью XMLPullParser.

<dt>
: <sx>outcome</sx>
<sx>result</sx>
</dt>

Я хочу получить результат ": результат результата". Потому что я читаю этот XML из онлайн-базы. Это может измениться. Например :

<dt>
:degree or measure of
<d_link>succeeding</d_link>
</dt>

Вопрос в том, как мне разобрать и получить весь текст в теге «dt» независимо от имени тегов в нем?

Это то, что я пробовал, но это не работает.

while (parser.next() != END_TAG){
            if (parser.getEventType() != TEXT)
            {
                continue;
            }
            else if (parser.getEventType() == TEXT)
            {
                Log.d("Text", parser.getText()+" in the likelihood");
                stringBuilder.append(parser.getText());
                parser.next();
            }

            }

person Samuel Agbede    schedule 15.08.2017    source источник


Ответы (2)


Вы должны сделать что-то похожее на:

while (eventType != XmlPullParser.END_DOCUMENT) 
{
    String tagname = parser.getName();
    switch (eventType) 
    {
        case XmlPullParser.START_TAG:
            if (tagname.equalsIgnoreCase("dt")) 
            {
                 // create a new instance of DTClass
                 dt= new DTClass();
            }
            break;

        case XmlPullParser.TEXT:
             text = parser.getText();
             break;

         case XmlPullParser.END_TAG:
             if (tagname.equalsIgnoreCase("dt")) {
                  // add DTClass object to list
                  dts.add(dt);
             } 
             else if (tagname.equalsIgnoreCase("sx")) 
             {
                  dt.setSX(text);
             } 

             break;

         default:
             break;
     }
     eventType = parser.next();
}
person Artur Poniedziałek    schedule 15.08.2017
comment
Спасибо большое Артур. Проблема в том, что я не могу контролировать, каким может быть субтег. Это может быть sx в этот момент для конкретного запроса, это может быть что-то другое позже. Как мне поступить в этом случае? - person Samuel Agbede; 15.08.2017
comment
Спасибо Артур. У меня есть еще один вопрос, аналогичный предыдущему. Как мне связаться с вами, пожалуйста? - person Samuel Agbede; 16.08.2017
comment
bestin-it.com найди меня в моем блоге - person Artur Poniedziałek; 16.08.2017
comment
Понятно. Спасибо. Проверяю ваш блог сейчас - person Samuel Agbede; 17.08.2017

Если мы предположим, что xml правильно отформатирован, вы можете изменить код, чтобы он запоминал открытый тег, значение и, когда тег заканчивается, добавлял значение в словарь/список, как показано ниже:

while (eventType != XmlPullParser.END_DOCUMENT) 
{
    String tagname = parser.getName();
    String detectedTag = "" ;
    String valueTag = "" ;
    switch (eventType) 
    {
        case XmlPullParser.START_TAG:
            if (tagname.equalsIgnoreCase("dt")) 
            {
                 // create a new instance of DTClass
                 // move this line to the end tag
                 //dt= new DTClass();
            }
            detectedTag = tagname ;
            break;

        case XmlPullParser.TEXT:
             valueTag = parser.getText();                 
             break;

         case XmlPullParser.END_TAG:
             if (tagname.equalsIgnoreCase(detectedTag)) {                      
                  // create a new instance of DTClass                      
                  dt= new DTClass();

                  // set value
                  dt.setValue(valueTag);

                  // add DTClass object to list od dictionary
                  dts.add(dt);
             } 
             else 
             {
                  // clear tag and value tag
                  detectedTag = "" ;
                  valueTag = "";
             } 

             break;

         default:
             break;
     }
     eventType = parser.next();
}
person Artur Poniedziałek    schedule 15.08.2017
comment
Большое спасибо! Теперь это работает. Даже первый ответ, который вы дали, работал отлично. Спасибо. - person Samuel Agbede; 16.08.2017
comment
Вот ты ???? - person Artur Poniedziałek; 16.08.2017