Android xmlpullparser обнаруживает каждый END_TAG дважды

Я действительно искал это, но не мог найти ответ, мой случай не кажется слишком далеким от документа и примеров, которые я прочитал, все же...
Я просто анализирую XML-файл с вложенными элементами с помощью xmlpullparser и сохраняю данные в ArrayList пользовательских объектов.
Почти все в порядке, но в конце я получаю в 2 раза больше объектов... Из того, что я собрал до сих пор, проблема заключается в том, чтоEND_TAG событие происходит каждый раз, сразу после START_TAG событие, затем анализ продолжается, и я снова сталкиваюсь с тем же END_TAG где я должен видеть это нормально.

Вот мой цикл анализа:

int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
    String name;
    switch (eventType) {
        case XmlPullParser.START_DOCUMENT:
            Log.i(TAG, "getLoadedXmlValues __ START_DOCUMENT");
            shop = new ArrayList();
            break;
        case XmlPullParser.START_TAG:
            name = parser.getName();
            Log.i(TAG, "getLoadedXmlValues __ START_TAG name = " + name);
            if (name.equalsIgnoreCase("WELCOME_TEXT")) {
                waitingScreenText = parser.nextText();
                currentContent = waitingScreenText;
            } else if (name.equalsIgnoreCase("ARTIST")) {
                //Log.i(TAG, "getLoadedXmlValues __ creating new artist object");
                currentArtist = new Artist();
            } else if (currentArtist != null) {
                if (name.equalsIgnoreCase("NAME")) {
                    currentArtist.setName(parser.nextText());
                    currentContent = currentArtist.getName();
                    //Log.i(TAG, "getLoadedXmlValues __ artist object exists, setting values. NAME = " + currentArtist.getName());
                } else if (name.equalsIgnoreCase("PICTURE")) {
                    currentArtist.setPicture(parser.nextText());
                    currentContent = currentArtist.getPicture();
                } else if (name.equalsIgnoreCase("DESCRIPTION")) {
                    currentArtist.setDescription(parser.nextText());
                    currentContent = currentArtist.getDescription();
                } else if (name.equalsIgnoreCase("TATTOOS")) {
                    currentTattoos = new ArrayList<>();
                } else if (name.equalsIgnoreCase("TATTOO")) {
                    currentTattoos.add(parser.nextText());
                    currentContent = "adding a tattoo";
                } else if (name.equalsIgnoreCase("DRAWINGS")) {
                    currentDrawings = new ArrayList<>();
                } else if (name.equalsIgnoreCase("DRAWING")) {
                    currentDrawings.add(parser.nextText());
                    currentContent = "adding a drawing";
                }
                Log.i(TAG, "getLoadedXmlValues __ START_TAG  content = " + currentContent);
            }
        case XmlPullParser.END_TAG:
            name = parser.getName();
            Log.i(TAG, "getLoadedXmlValues __ END_TAG name = " + name);
            if (name.equalsIgnoreCase("TATTOOS")&& currentArtist !=null&& currentTattoos !=null) {
                currentArtist.setTattoos(currentTattoos);
            } else if (name.equalsIgnoreCase("DRAWINGS")&& currentArtist !=null&& currentDrawings !=null) {
                currentArtist.setDrawings(currentDrawings);
            } else if (name.equalsIgnoreCase("ARTIST")&& currentArtist !=null) {
                //Log.i(TAG, "getLoadedXmlValues __ END_TAG :: add artist to shop");
                shop.add(currentArtist);
            }
    }

Вот мой xml: (Я загружаю файл из Интернета, затем записываю его содержимое в файл на внутреннем хранилище с помощьюbuilder.append(line).append("\n");)

<?xml version="1.0" encoding="utf-8"?>
<datas>
    <DATE_CREATED_TIMESTAMP>
        123456789
    </DATE_CREATED_TIMESTAMP>
    <WELCOME_TEXT>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent venenatis lacus ac est ultrices dictum. Aenean rhoncus finibus turpis, sit amet condimentum augue porta eget.
    </WELCOME_TEXT>
    <ARTISTS>
        <ARTIST>
            <NAME>artiste 1</NAME>
            <PICTURE>http://dummy.url/artiste_1/face-1.jpg</PICTURE>
            <DESCRIPTION>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent venenatis lacus ac est ultrices dictum. Aenean rhoncus finibus turpis, sit amet condimentum augue porta eget.</DESCRIPTION>
            <TATTOOS>
                <TATTOO>http://dummy.url/artiste_1/tattoos/a.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_1/tattoos/b.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_1/tattoos/c.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_1/tattoos/d.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_1/tattoos/e.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_1/tattoos/f.jpg</TATTOO>
            </TATTOOS>
                <DRAWING>http://dummy.url/artiste_1/dessisn/a.jpg</DRAWING>
            <DRAWINGS>
                <DRAWING>http://dummy.url/artiste_1/dessisn/b.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_1/dessisn/c.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_1/dessisn/d.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_1/dessisn/e.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_1/dessisn/f.jpg</DRAWING>
            </DRAWINGS>
        </ARTIST>
        <ARTIST>
            <NAME>artiste 2</NAME>
            <PICTURE>http://dummy.url/artiste_2/face-2.jpg</PICTURE>
            <DESCRIPTION>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent venenatis lacus ac est ultrices dictum. Aenean rhoncus finibus turpis, sit amet condimentum augue porta eget.</DESCRIPTION>
            <TATTOOS>
                <TATTOO>http://dummy.url/artiste_2/tattoos/a.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_2/tattoos/b.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_2/tattoos/c.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_2/tattoos/d.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_2/tattoos/e.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_2/tattoos/f.jpg</TATTOO>
            </TATTOOS>
            <DRAWINGS>
                <DRAWING>http://dummy.url/artiste_2/dessisn/a.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_2/dessisn/b.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_2/dessisn/c.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_2/dessisn/d.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_2/dessisn/e.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_2/dessisn/f.jpg</DRAWING>
            </DRAWINGS>
        </ARTIST>
        <ARTIST>
            <NAME>artiste 3</NAME>
            <PICTURE>http://dummy.url/artiste_3/face-3.jpg</PICTURE>
            <DESCRIPTION>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent venenatis lacus ac est ultrices dictum. Aenean rhoncus finibus turpis, sit amet condimentum augue porta eget.</DESCRIPTION>
            <TATTOOS>
                <TATTOO>http://dummy.url/artiste_3/tattoos/a.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_3/tattoos/b.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_3/tattoos/c.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_3/tattoos/d.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_3/tattoos/e.jpg</TATTOO>
                <TATTOO>http://dummy.url/artiste_3/tattoos/f.jpg</TATTOO>
            </TATTOOS>
            <DRAWINGS>
                <DRAWING>http://dummy.url/artiste_3/dessisn/a.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_3/dessisn/b.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_3/dessisn/c.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_3/dessisn/d.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_3/dessisn/e.jpg</DRAWING>
                <DRAWING>http://dummy.url/artiste_3/dessisn/f.jpg</DRAWING>
            </DRAWINGS>
        </ARTIST>
    </ARTISTS>
</datas>

А вот выдержка из журнала:

 START_DOCUMENT
START_TAG name = datas
 END_TAG name = datas
 START_TAG name = DATE_CREATED_TIMESTAMP
 END_TAG name = DATE_CREATED_TIMESTAMP
 END_TAG name = DATE_CREATED_TIMESTAMP
 START_TAG name = WAITING_SCREEN
 END_TAG name = WAITING_SCREEN
 START_TAG name = WELCOME_TEXT
 END_TAG name = WELCOME_TEXT
 END_TAG name = WAITING_SCREEN
 START_TAG name = ARTISTS
 END_TAG name = ARTISTS
 START_TAG name = ARTIST
 END_TAG name = ARTIST
 START_TAG name = NAME
 START_TAG  content = artiste 1
 END_TAG name = NAME
 START_TAG name = PICTURE
[...]

Как видите, независимо от того, содержит ли элемент вложенные элементы или нет, открывающий тег всегда вызывает как START_TAG и END_TAG быть уволеным...
Я попытался зарегистрировать свой локальный XML-файл, чтобы проверить его, и это правильно, поэтому проблема должна исходить из моего цикла while... Я полностью растерялся, почему это так...

1 ответ

Решение

Просто добавь break; после каждого case

Другие вопросы по тегам