...
</trk>
</gpx>
<trkpt lat="53.502100503614564" lon="10.065932731189879">
<ele>0.0</ele>
<time>2017-10-15T11:42:39.916+0000</time>
<speed>0.3</speed>
</trkpt>
这是我要解析的GPX文件的结尾。不幸的是gpxpy
和lxml
我无法解析文件并改为收到错误消息。在</gpx>
最终结束后,所有使用过的解析器都无法处理额外的内容。似乎他们只能完全解析它而不是部分解析它。这是真的吗?
我尝试使用open(gpxfile,'r+').read().find("</gpx>")
函数解决此问题,以便在使用f.write('')
后找到文件的结尾并使用f.seek(positionOfEnd)
覆盖其他任何内容。
使用truncate来截断文件的其余部分很遗憾不能在r+
写入模式下工作。
此外,我尝试使用etree.iterparse
逐行解析文件,但这对我来说也没有用。
此处代码我正在使用:
# with gpxpy
_GPX = open(gpxfile,'r')
gpx = gpxpy.parse(_GPX)
# with lxml
for elem in etree.iterparse(path+"\\"+file, events=('start','end'), tag="gpx"):
print(elem)
使用gpxpy
我得到:
raise mod_gpx.GPXXMLSyntaxException('Error parsing XML: %s' % str(e), e)
gpxpy.gpx.GPXXMLSyntaxException: Error parsing XML: Extra content at the end of the document, line 16, column 3 (line 16)
使用lxml
我得到:
File "src\lxml\iterparse.pxi", line 208, in lxml.etree.iterparse.__next__ (src\lxml\etree.c:155949)
File "file:/C:/Users/user.name/Desktop/test/Mission%202.gpx", line 16
lxml.etree.XMLSyntaxError: Extra content at the end of the document, line 16, column 3
我尝试的是:
f = open(path+"\\"+file,'r+')
pos = f.read().find("</gpx>")
f.seek(pos+1)
f.write('testEdit')
f.close
但字符串'testEdit'没有按预期放置,而是放在文件中间的某个位置,甚至不接近gpx标记。
我如何轻松处理这个问题?我还能尝试什么?我正在使用Win7和python2.7
答案 0 :(得分:0)
我担心我的方法不是处理gpx / xml / html数据的好方法,但你可以试试
import re
from lxml import etree
f = open(gpxfile, 'r')
gpx = re.search(r'\<gpx\>(.|\n)*\<\/gpx\>', f.read()).group(0) # Give you '<gpx>...</gpx>'
tree = etree.fromstring(gpx)
您也可以尝试BeautifulSoup
(可能是更好的方法),它可以处理<trkpt>
之外的<gpx>
标记。
from bs4 import BeautifulSoup
f = open(gpxfile, 'r')
soup = BeautifulSoup(f.read(), 'lxml')