XmlPullParser пропускает START_TAG?

Итак, я пытаюсь проанализировать файл GPX, используя XmlPullParser. По большей части у меня это работает, но заметил, что я не получаю того, что ожидаю. Фрагмент файла:

<?xml version="1.0" encoding="utf-8"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1">
 <wpt lat="34.767778" lon="-88.078889">
  <name>EG1325</name>
  <type>Waypoint</type>
  <extensions>
  <groundspeak:cache>
   <groundspeak:country>United States</groundspeak:country>
</groundspeak:cache>
   </extensions>
</wpt>
</gpx>

Я обрезал здесь неважные теги для целей этого вопроса, предполагая, что файл проходит проверку со всеми представленными пространствами имен. (Потому что это делает полный файл.)

Проблема возникает, когда я прохожу мимо тега <type>. Используя ЛИБО next() или nextToken(), я получу событие END_TAG для тега <type>. Тогда моим следующим событием будет событие TEXT, текст будет содержать \n. Событием после этого будет START_TAG, но для тега <groundspeak:cache> и НЕ тег <extensions>.

Кажется, я понимаю это как для использования вызовов nextToken(), так и next(). Ожидается ли это?

Изменить, чтобы добавить: единственный параметр, который я устанавливаю в коде для XmlPullParser:

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);

person Coyttl    schedule 13.08.2019    source источник


Ответы (1)


Проверьте свой xml-файл. Некоторые xml-файлы содержат в начале несколько дополнительных байтов, а именно «EF BB BF». Это называется BOM (Byte-Order-Mark). Когда xml содержит эти дополнительные байты, наш XmlPullParser не работает должным образом и ведет себя так, как будто нет события START_TAG и переходит к END_DOCUMENT.

person KyluAce    schedule 11.03.2020