有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java XmlPullParser是否跳过开始标记?

因此,我尝试使用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>标记时,问题就出现了。 使用next()nextToken(),我将获得<type>标记的END_标记事件。然后我的下一个事件将是一个文本事件,文本将包含\n。之后的事件将是START_标记,但对于<groundspeak:cache>不是<extensions>标记

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

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

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

共 (1) 个答案

  1. # 1 楼答案

    检查xml文件。一些xml文件在开始时包含一些额外的字节,具体来说是“EF-BB-BF”。它被称为BOM(字节顺序标记)。当xml包含这些额外字节时,我们的XmlPullParser无法正常工作,行为就像没有开始标记事件,而是转到结束文档