ich muss mal wieder eure Hilfe in Anspruch nehmen. Diesmal zum Thema XML. Ich habe eine XML-Datei die automatisch durch ein anderes Programm geschrieben wird. Nun will ich diese Datei mit Hilfe von Python erweitern.
Also konkret soll zum Einen ein neuer Unterpunkt erstellt werden und zum Anderen ein völlig neuer Zweig erstellt werden mit deren Unterpunkten.
Hier mal die XML-Datei die bisher da ist:
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE roadmap SYSTEM "roadmap.dtd">
<roadmap version="1.2">
<stations>
<station angle="0" id="id0" name="Station1">
<point x="-5000" y="4042"/>
</station>
<station angle="0" id="id1" name="Station2">
<point x="5050" y="3927"/>
</station>
<station angle="0" id="id2" name="Station3">
<point x="-8000" y="-1996"/>
</station>
Hier soll eine neue Station eingefügt werden, nach oberem Muster
</stations>
Hier soll nun folgendes eingefügt werden:
<edges>
<edge endstation="id3" startstation="id0">
<points>
<point x="-5000" y="4042"/>
....
</points>
</edge>
</edges>
</roadmap>
Code: Alles auswählen
<station angle ="0" id="id3" name="Station4">
Stationspunkt = (2569, 4859)
Dieser Punkt wird durch verschiedenste Berechnungen im Vorfeld ermittelt.
Danach geht es weiter mit dem Einlesen einer Liste und abspeichern in dem XML-File. Die Liste hat n-Elemente (und jeweils in Tupeln) und jedes einzelne soll in ein Tag gepackt werden.
Die Beispielliste sieht so aus:
Code: Alles auswählen
Liste = [(2016, 1986), (6095, 4526), (6359, 4102), (2280, 1562), (2544, 1138)]
Ausgeparst wird die XML-Datei übrigens über Elementtree. Das ausparsen wurde benötigt, um bestimmte Berechnungen durchzuführen. Und nun sollen die Ergebnisse der Berchnungen zurück in die XML-Datei geschrieben werden.
Das ganze wurde so gelöst:
Code: Alles auswählen
from xml.etree import ElementTree as etree
def auslesen_Punkte():
doc = etree.parse('leichteBerechnung.rm')
for station in doc.findall('stations/station'):
point = station.find('point')
result.append((station.get('id'),
(int(point.get('x')), int(point.get('y')))))
return result
LG
Daniela