所以我尝试使用 XmlPullParser 解析 GPX 文件。 在大多数情况下,我可以正常工作,但注意到我没有得到我所期望的结果。 文件 fragment :
<?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()
,我将获得 <type>
的 END_TAG 事件标签。那么我的下一个事件将是文本事件,文本将包含 \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。
关于java - XmlPullParser 正在跳过 START_TAG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57469969/