Итерация по дереву XML - PullRequest
       16

Итерация по дереву XML

0 голосов
/ 27 сентября 2019

Итак, у меня есть следующий лист xml, и мне нужно распечатывать временные шаги, только если тип транспортного средства нормальный:

<?xml version="1.0" encoding="utf-8"?>
<fcd-export xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/fcd_file.xsd">
    <timestep time="0.00">
        <vehicle slope="0.00" lane="32909782#5_1" angle="85.36" type="normal" pos="12.10" y="6290.09" x="7863.24" speed="0.00" id="bus0"></vehicle>
        <vehicle slope="0.00" lane="34057952#19_1" angle="111.40" type="veh_passenger" pos="2.74" y="4577.24" x="12936.51" speed="0.00" id="veh0"></vehicle>
    </timestep>
    <timestep time="2.00">
        <vehicle slope="0.00" lane="32909782#5_1" angle="85.36" type="bus" pos="14.65" y="6290.30" x="7865.78" speed="1.83" id="bus0"></vehicle>
        <vehicle slope="0.00" lane=":3937025936_11_0" angle="12.20" type="bus" pos="1.25" y="6602.77" x="15149.41" speed="2.39" id="bus1"></vehicle>
        </vehicle>
        <vehicle slope="0.00" lane="-4585082#2_1" angle="357.57" type="veh_passenger" pos="5.10" y="1534.76" x="10182.72" speed="0.00" id="veh5"></vehicle>
    </timestep>
    <timestep time="3.00">
        <vehicle slope="0.00" lane="32909782#5_1" angle="85.36" type="normal" pos="17.22" y="6290.50" x="7868.34" speed="2.57" id="bus0"></vehicle>
        <vehicle slope="0.00" lane="-520627761#0_1" angle="294.88" type="veh_passenger" pos="1.04" y="4078.46" x="7552.28" speed="0.00" id="veh1"></vehicle>
        <vehicle slope="0.00" lane="-4585082#2_1" angle="357.57" type="veh_passenger" pos="6.99" y="1536.64" x="10182.64" speed="1.89" id="veh5"></vehicle>
    </timestep>
    <timestep time="4.00">
        <vehicle slope="0.00" lane="32909782#5_1" angle="85.36" type="normal" pos="20.83" y="6290.80" x="7871.94" speed="3.61" id="bus0"></vehicle>
        <vehicle slope="0.00" lane=":370532908_0_0" angle="236.46" type="normal" pos="2.54" y="6596.43" x="15145.39" speed="4.43" id="bus1"></vehicle>
        <vehicle slope="0.00" lane="-147066248#4_0" angle="153.72" type="normal" pos="12.10" y="6381.40" x="13622.55" speed="0.00" id="bus6"></vehicle>
        <vehicle slope="0.00" lane=":287820954_0_0" angle="111.47" type="veh_passenger" pos="0.36" y="4577.06" x="12936.98" speed="0.00" id="veh0"></vehicle>
        <vehicle slope="0.00" lane="-520627761#0_1" angle="294.88" type="veh_passenger" pos="1.04" y="4078.46" x="7552.28" speed="0.00" id="veh1"></vehicle>
        </vehicle>
    </timestep>
</fcd-export>

код следующий:

import os
import xml.etree.ElementTree as ET
import geopy.distance
import pandas as pd
import csv


tree = ET.parse('times2.xml')
file = os.path.abspath('times2.xml')

root = tree.getroot()

for timestep in root.findall('timestep'):
    for vehicle in root.iter('type'):
        if 'normal' in vehicle.attrib:
            f3.write(timestep.get('time'))

Полученный файл .csv пуст.Я что-то упускаю?

дополнительная информация, которая может помочь:

for vehicle in root.iter('vehicle'):
   if vehicle.get('type')=="normal":
        id = vehicle.get('id')
        f3.write(id)

. Это показывает, что я могу добраться до автомобиля и распечатать его атрибуты, но главное здесь -возможность связать автомобиль с временным шагом, так что, когда я сталкиваюсь с «нормальным» автомобилем, я печатаю его временной шаг

...