用lxml提取子文本python

时间:2016-11-06 22:00:21

标签: python lxml

我试图从xml文件(GPX)中提取与我的gpx文件的路径点相关的所有信息与lxml库。 我的gpx文件有一部分。

<?xml version="1.0"?>
<gpx
 version="1.0"
creator="GPSBabel - http://www.gpsbabel.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.topografix.com/GPX/1/0"
xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
<time>2006-01-23T02:00:28Z</time>
<trk>
  <name>08-JAN-06 02</name>
<trkseg>
<trkpt lat="-33.903422356" lon="151.175565720">
  <ele>19.844360</ele>
<time>2006-01-08T06:45:07Z</time>
</trkpt>
</trkseg>
</trk>
</gpx>

我可以通过以下方式获得点纬度和经度:

node.get("lon") and node.get("lat")

但是当我试着抽出时间时:

for element in root:
    if element.tag=="{http://www.topografix.com/GPX/1/0}time":
       time=str(element.text)

我终于得到了这样的结果

(1.45,32.12,'')

时间的空白值我该如何解决?

1 个答案:

答案 0 :(得分:0)

我假设有一个if ($user ~* "(?<p>[aa-zZ]+)@example.com") { set $xuser $p; } 和一个</trk>标签应该在您发布的内容的末尾,否则会出现格式错误。

我将以非常冗长的方式写出来。首先,让我们假设您有一个包含xml的lxml对象 - 我们将其称为</trkseg>

如有必要,首先定义您的命名空间:

tree

我喜欢使用XPath查询。如果您尝试查询ns = {'gpx': 'http://www.topografix.com/GPX/1/0'} 并获取未定义的命名空间错误,请再次指定命名空间参数 - 您必须在xpath表达式前加上键,如tree.xpath('//trk')

现在您想获得所有tree.xpath('//gpx:trk', namespaces=ns)个对象的列表:

trk

如果没有trk_objects = tree.xpath('//gpx:trk', namespaces=ns) 标签,这将返回它们的列表或空列表。

然后你想迭代它们(我假设每个trk标签只有一个trkseg标签,你需要使用名称空间):

trk