我正在尝试重新组织一些xml文件,这些文件包含完整路由的以下部分,其结构如下:
<trk>
<name>GPSRoute.XML</name>
<trkseg>
<trkpt lat="37.077882" lon="-112.242785">
<ele>1688.00</ele>
<time>2020-04-18T01:56:39.80Z</time>
</trkpt>
<extensions>
<name>14</name>
<gte:color>#00ce00</gte:color>
</extensions>
</trkseg>
<trkseg>
<trkpt lat="37.077888" lon="-112.242783">
<ele>1688.00</ele>
<time>2020-04-18T01:56:39.80Z</time>
</trkpt>
<extensions>
<name>1</name>
<gte:color>#00ce00</gte:color>
</extensions>
</trkseg>
</trk>
我正在尝试按名称而不是当前时间对文件进行排序,并将结果写入新文件。到目前为止,这是我的学习范围,它成功地捕获了列表中的名称,但在data.sort()上出现了以下错误:
“ TypeError:'
如果有人能指出我正确的方向,将不胜感激!
import xml.etree.ElementTree as ET
tree = ET.parse('Filename.xml')
root = tree.getroot()
data = []
for track in root:
for segment in track:
for extension in segment:
for name in extension.findall('name'):
print(name.text)
data.append((name))
data.sort()
tree.write('Sorted.xml')
[请注意,由于您问题中的xml无效(您有未声明的名称空间),因此我使用了更为宽容的html解析器。使用您的实际代码,您应该使用xml解析器,如下所示。
此代码的作用是从每个<name>
父节点收集每个<trkseg>
子节点的节点值(即您的目标编号),将它们保存到列表中,对列表进行排序,然后再次使用排序后的列表按此排序顺序选择<trkseg>
节点,并使用它们(以及开始和结束标记)来创建新的xml。