因此,我试图使用XmlPullParser解析GPX文件。
在大多数情况下,我都能正常运行,但是注意到我没有达到我的期望。
该文件的片段:

<?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>标记时,问题就来了。
使用EITHER next()nextToken(),我将获得<type>标记的END_TAG事件。然后我的下一个事件将是TEXT事件,该文本将包含\n。之后的事件将是START_TAG,但对于<groundspeak:cache>而不是<extensions>标记。

我似乎都通过使用nextToken()next()调用得到了这一点。这是预期的吗?

编辑添加:我在XmlPullParser的代码中设置的唯一设置是:

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

最佳答案

检查您的xml文件。一些xml文件在开始时包含一些额外的字节,即“ EF BB BF”。它称为BOM(字节顺序标记)。当xml包含这些多余的字节时,我们的XmlPullParser不能正常工作,并且表现为没有START_TAG事件,并转到END_DOCUMENT。

10-08 07:24