XML Разбор в Android {Java} - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь проанализировать файл XML в моем приложении android и попробовал следовать примерам Android Developers на сайте. Однако, даже если все теги в тегах 'start' были обработаны, программа продолжает работу в бесконечном l oop и никогда не выходит из 'while (parser.next ()! = XmlPullParser.END_TAG)' l oop, хотя мой XML файл начинается и заканчивается тегами <data> и </data>. Что я делаю не так?

 public List parse(InputStream in) throws XmlPullParserException, IOException { /* Function that takes Assay file as input stream */
        try {
            XmlPullParser parser = Xml.newPullParser(); /* Create new parser  */
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); /*  */
            parser.setInput(in, null);
            parser.nextTag();
            return readFeed(parser); /* extracts and processes the data */
        } finally {
            in.close();
        }
    }
 private List readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
        List girlNameList = new ArrayList();
        List boyNameList = new ArrayList();
        parser.require(XmlPullParser.START_TAG, ns, "data"); 

        while (parser.next() != XmlPullParser.END_TAG) { 
            parser.next();
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String currentTag = parser.getName();         
            if(currentTag.equals("emily")) {            
                girlNameList.add(currentTag);            
            } else if(currentTag.equals("robert") {
                 boyNameList.add(currentTag); 
            } else {
                skip(parser); 
            }                          
        }
        return namesList;
    }
<data>
    <emily type="short" msg="======something==========">  </emily>
    <emily type="tall" msg="======another message==========">  </emily>

    <robert type="short" > </robert>

    <emily type="tall" > </emily>

    <robert type="tall" msg="use this later" > </robert>
    <tester type="n/a" msg="should be skipped" > </tester>
</data>

1 Ответ

1 голос
/ 11 апреля 2020

Использование

 while (parser.next() != XmlPullParser.END_DOCUMENT)

Вы пропускаете последний END_TAG в проверке состояния в то время как l oop.

...