Как разобрать XML с XmlPullParser? - PullRequest
2 голосов
/ 05 февраля 2020

Я прочитал файл Xml с помощью XmlPullParser, но он дает исключение (неопределенный объект ref (позиция: TEXT @ 817: 4 в java .io. InputStreamReader@4cb5258), когда дело доходит до Dscp .

Я читаю еще один снимок, подобный этому, перед этим снимком, все в порядке, пока не получится. Когда я удаляю Dse c из xml, все в порядке, и я читаю все файлы xml. Когда я читать xml с Dse c у меня есть исключение в этом кадре

Предыдущий кадр похож на этот кадр

<Shot>
        <ShotGUID>59AA1C15D3384B5691FBFB40B0FE38BD</ShotGUID>
        <Title>##Step 2-Categories of Projects</Title>
        <StartTime>00:00:40.00</StartTime>
        <EndTime>00:00:00.00</EndTime>
        <FileName>Shot0042.jpg</FileName>
        <Dscp>Step 2-Categories of Projects

Aggregate project plan identifies four separate categories of projects:

Derivative projects … those that are only incrementally different from existing offerings
Platform projects … major departures from existing offerings … the next generation
Breakthrough projects … involving a newer technology … possibly a “disruptive” technology
R&D projects … “blue sky” or visionary endeavors   

        </Dscp>
<Footer></Footer>

    </Shot>

И это мой код:

 XmlPullParserFactory parserFactory;
        parserFactory = XmlPullParserFactory.newInstance();
        XmlPullParser parser = parserFactory.newPullParser();
 ByteArrayInputStream byteArrayInputStreamXmlData = new ByteArrayInputStream(bufferXMLData);
        parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
        parser.setInput(byteArrayInputStreamXmlData, "UTF-8");

 List<PageModel> pages = new ArrayList<>();
        int eventType = parser.getEventType();
        PageModel current = null;

        while (eventType != XmlPullParser.END_DOCUMENT) {
            String eltName = null;

            switch (eventType) {
                case XmlPullParser.START_TAG:
                    eltName = parser.getName();


                    if (eltName.equals("Shot")) {
                        current = new PageModel();
                        pages.add(current);
                    } else if (current != null) {

                        switch (eltName) {
                            case "ShotGUID":
                                current.setShotGUID(parser.nextText());
                                break;

                            case "StartTime": 
                                current.setStartTime(parser.nextText());
                                break;

                            case "EndTime":
                                current.setEndTime(parser.nextText());
                                break;

                            case "FileName":
                                current.setFileName(parser.nextText());
                                break;

                            case "Dscp":
                                current.setDscp(parser.nextText());     

                           case "Footer" :
                                current.setFooter(parser.nextText());
                                break;
                        }
                    }
                    break;
            }
            eventType = parser.next();
        }

1 Ответ

1 голос
/ 08 февраля 2020

После долгих исследований я понял, что не могу использовать символ & в значении Dscp, и мне нужно использовать альтернативные коды.
Что такое специальные символы в XML?

 &lt; (<), &amp; (&), &gt; (>), &quot; ("), and &apos; (').
...