Мой XmlPullParser выдает исключение XmlPullParserException: неожиданный токен при попытке прочитать онлайн-файл XML? - PullRequest
0 голосов
/ 05 августа 2020

Фон

Я разрабатываю простое приложение для прогнозирования погоды, предназначенное для отображения погоды для шести разных мест. Я использую Java и Android Studio для разработки этого проекта. Приложение использует URL-адреса с веб-сайта погоды BB C, каждый из которых представляет собой файл XML.

Здесь - это ссылка на один из файлов XML, которые я пытаюсь проанализировать. , все они практически идентичны по XML. Я использовал несколько XML валидаторов, чтобы убедиться, что они действительны.

Проблема

При запуске приложение работает нормально. Однако в Logcat появляется ошибка:

org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT null@1:5 in java.io.StringReader@4acac2b) 
W/System.err:     at com.android.org.kxml2.io.KXmlParser.next(KXmlParser.java:432)
W/System.err:     at com.android.org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
W/System.err:     at DAC.GCU.mpd_resit_davidcavana.MainActivity$Task.run(MainActivity.java:249)
W/System.err:     at java.lang.Thread.run(Thread.java:923)

Код

Вот код, в котором я читаю файл XML и пытаюсь его разобрать.

            URL aurl;
            URLConnection yc;
            BufferedReader in = null;
            String inputLine = "";

            try {
                Log.e("MyTag", "in try");
                aurl = new URL(url);
                yc = aurl.openConnection();
                in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

                while ((inputLine = in.readLine()) != null) {
                   result = result + inputLine;
                   result = result.replaceAll("[^\\x20-\\x7e]", "");
                   Log.e("MyTag", inputLine);
                }
                in.close();
            } catch (IOException ae) {
                Log.e("MyTag", "ioexception");
            }

            XmlPullParserFactory factory = null;
            try {
                factory = XmlPullParserFactory.newInstance();
                factory.setNamespaceAware(true);
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }

            XmlPullParser xpp = null;
            try {
                xpp = factory.newPullParser();
                xpp.setInput(new StringReader(result));

                int eventType = xpp.getEventType();
                while (eventType != xpp.END_DOCUMENT) {
                    if (eventType == xpp.START_DOCUMENT) {
                        System.out.println("Start Document");
                    } else if (eventType == xpp.START_TAG) {
                        System.out.println("Start Tag: " + xpp.getName());
                    } else if (eventType == XmlPullParser.END_TAG) {
                        System.out.println("End tag " + xpp.getName());
                    } else if (eventType == XmlPullParser.TEXT) {
                        System.out.println("Text " + xpp.getText());
                    }
                    eventType = xpp.next();
                }
                System.out.println("End Document");
            } catch (XmlPullParserException | IOException e) {
                e.printStackTrace();
            }

Примечание

Переменная result работает должным образом - она ​​содержит весь файл XML в виде строки. Эту переменную можно отправить в представление TextView, а необработанные данные XML можно увидеть в самом приложении.

Я также попытался изменить строку

in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

* От 1029 * до

in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8"));

, и это по-прежнему дает ту же ошибку.

Любая помощь будет принята с благодарностью.

...