GPXXMLSyntaxException:解析错误 XML:格式不正确(无效标记):第 1 行,第 11 列

GPXXMLSyntaxException: Error parsing XML: not well-formed (invalid token): line 1, column 11

我在像这样解析 GPX 文件时遇到此错误:

gpx_file_object = open(path_and_file, 'r')
parser = gpxpy.parse(gpx_file_object)

GPX 文件如下所示:

<?xml version='1.0' encoding='UTF-8'?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://www.topografix.com/GPX/1/1" creator="EMNRD.GPXWriter" 
     version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 
     http://www.topografix.com/GPX/1/1/gpx.xsd">
  <time>01/07/2016  07:49:50</time>
  <metadata>
    <name>0/0</name>
    <desc>24989196</desc>
  </metadata>
  <trk>
    <name>0/0</name>
    <trkseg>
      <trkpt lat="35.000096" lon="-108.050042"/>
      <trkpt lat="34.5277756667" lon="-108.050042"/>
      <trkpt lat="34.5277756667" lon="-107.4452589"/>
      <trkpt lat="35.000096" lon="-107.4452589"/>
      <trkpt lat="34.000096" lon="-108.050042"/>
    </trkseg>
  </trk>
</gpx>

此 GPX 文件是由我使用 lxml/etree 编写的 python 代码生成的。我在编辑器中以文本和十六进制模式查看了该文件,没有发现任何异常。我将上面的内容粘贴到 xml 验证器中并通过了。我将 GPX 文件加载到 MOBAC 中,它看起来不错。

我读过这个问题,但没有找到适合我的解决方案:

有什么建议吗?

您问题中的 GPX 文件 well-formed,所以它不是解析器真正看到的,或者报错信息不对。

您一个人可以确认解析器真正看到的是什么。继续处理错误消息错误的(不太可能)可能性,您仍然有 validation 问题需要处理。 (In XML, valid is not the same as well-formed.)

这是您的 GPX 文件,尽管有错误消息,它已经 well-formed,也更正为 有效 :

<?xml version='1.0' encoding='UTF-8'?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://www.topografix.com/GPX/1/1"
     creator="EMNRD.GPXWriter"
     version="1.1"
     xsi:schemaLocation="http://www.topografix.com/GPX/1/1 gpx.xsd">
  <metadata>
    <name>0/0</name>
    <desc>24989196</desc>
    <time>2016-01-07T00:00:00</time>
  </metadata>
  <trk>
    <name>0/0</name>
    <trkseg>
      <trkpt lat="35.000096" lon="-108.050042"/>
      <trkpt lat="34.5277756667" lon="-108.050042"/>
      <trkpt lat="34.5277756667" lon="-107.4452589"/>
      <trkpt lat="35.000096" lon="-107.4452589"/>
      <trkpt lat="34.000096" lon="-108.050042"/>
    </trkseg>
  </trk>
</gpx>

请注意,在上述修复之前,time 放错了位置且格式不正确。