#The script is built out of events. Eacht event at least consists of an event import xml.etree.cElementTree as ET class Event: def __init__(self,date): self.date = date @classmethod def fromXML(cls,event_element): if(event_element.tag == "Station_Event"): return(StationEvent.fromXML(event_element)) elif(event_element.tag == "Line_Segment_Event"): return(LineSegmentEvent.fromXML(event_element)) class StationEvent(Event): def __init__(self,date,name,coordinates,opening_or_closure,vertex_indices): self.date=date self.name=name self.coordinates=coordinates self.opening_or_closure=opening_or_closure self.vertex_indices = vertex_indices def toXML(self): station_event_element = ET.Element("Station_Event") station_event_element.attrib["Date"]=self.date station_event_element.attrib["Name"]=self.name station_event_element.attrib["Latitude"]=str(self.coordinates[0]) station_event_element.attrib["Longitude"]=str(self.coordinates[1]) station_event_element.attrib["opening_or_closure"]=str(self.opening_or_closure) vertex_indices_element = ET.Element("Vertex_Indices") for line_name in self.vertex_indices.keys(): vertex_indices_element.attrib["line"+str(line_name)] = str(self.vertex_indices[line_name]) station_event_element.append(vertex_indices_element) return(station_event_element) @classmethod def fromXML(cls,station_event_element): date=station_event_element.attrib["Date"] name=station_event_element.attrib["Name"] coordinates =None if(station_event_element.attrib["Latitude"]!="None" and \ station_event_element.attrib["Latitude"]!="None"): coordinates=(float(station_event_element.attrib["Latitude"]),\ float(station_event_element.attrib["Longitude"])) opening_or_closure = station_event_element.attrib["opening_or_closure"] vertex_indices_element= station_event_element[0] vertex_indices = {} for line_name in vertex_indices_element.attrib.keys(): vertex_indices[int(line_name[4:])] = int(vertex_indices_element.attrib[line_name]) return(cls(date, name, coordinates,opening_or_closure,vertex_indices)) class LineSegmentEvent(Event): def __init__(self,date,station_events,gpx_file_path,\ start_coord,end_coord,start_name,end_name,opening_or_closure): self.date=date self.station_events=station_events self.gpx_file_path=gpx_file_path self.start_coord=start_coord self.end_coord=end_coord self.start_name=start_name self.end_name=end_name self.opening_or_closure=opening_or_closure def toXML(self): line_segment_event_element = ET.Element("Line_Segment_Event") line_segment_event_element.attrib["Date"]=self.date for station_event in self.station_events: line_segment_event_element.append(station_event.toXML()) line_segment_event_element.attrib["Gpx_File_Path"]=self.gpx_file_path line_segment_event_element.attrib["Start_Lat"]=str(self.start_coord[0]) line_segment_event_element.attrib["Start_Lon"]=str(self.start_coord[1]) line_segment_event_element.attrib["End_Lat"]=str(self.end_coord[0]) line_segment_event_element.attrib["End_Lon"]=str(self.end_coord[1]) line_segment_event_element.attrib["Start_Name"]=self.start_name line_segment_event_element.attrib["End_Name"]=self.end_name line_segment_event_element.attrib["opening_or_closure"]=str(self.opening_or_closure) return(line_segment_event_element) @classmethod def fromXML(cls,line_segment_event_element): date = line_segment_event_element.attrib["Date"] station_events=[] for station_event_element in line_segment_event_element: station_events.append(StationEvent.fromXML(station_event_element)) gpx_file_path = line_segment_event_element.attrib["Gpx_File_Path"] start_coord = (float(line_segment_event_element.attrib["Start_Lat"]),\ float(line_segment_event_element.attrib["Start_Lon"])) end_coord = (float(line_segment_event_element.attrib["End_Lat"]),\ float(line_segment_event_element.attrib["End_Lon"])) start_name = line_segment_event_element.attrib["Start_Name"] end_name = line_segment_event_element.attrib["End_Name"] opening_or_closure = line_segment_event_element.attrib["opening_or_closure"] return(cls(date,station_events,gpx_file_path,start_coord,end_coord,start_name,end_name,opening_or_closure)) def eventsToXml(events): events_element = ET.Element("Events") for event in events: events_element.append(event.toXML()) tree = ET.ElementTree(events_element) ET.indent(tree,'\t') tree.write("Events.xml")