XML lesen und in einem Block wegschreiben
Verfasst: Montag 10. Juni 2013, 13:51
Hallo,
ich stehe gerade etwas auf dem Schlauch, ich bin beim Thema XML und Python noch nicht so auf dem Stan der Dinge. Zu meinem Problem.
Ich versuche eine XML Datei so zu zerlegen, dass ich die Werte dann in eine Datenbank schreiben kann.
Hier die Struktur der XML Datei:
Mit meinem Code möchte ich erreichen, dass für jedes device eine Liste mit mv Elementen ausgegeben wird. Anstatt dem Print soll die Zeile später in eine Datenbank geschrieben werden.
Meine Ideee hier war die Werte hinter mv mit IF Schleifen zu Variablen hinzuzufügen. Doch das geht ja nicht weil ich immer pro Schleife an der Stelle nur ein wert habe.
Ich glaube ich mache hier einen grundsätzlichen Denkfehler. Was denkt Ihr gehe ich das Ganze falsch an, oder könnte ich mir zum Beispiel auch ein Array bilden mit den Bezeichnungen und den Werten hinter "mv"?
Vielen Dank für Eure Hilfe
ich stehe gerade etwas auf dem Schlauch, ich bin beim Thema XML und Python noch nicht so auf dem Stan der Dinge. Zu meinem Problem.
Ich versuche eine XML Datei so zu zerlegen, dass ich die Werte dann in eine Datenbank schreiben kann.
Hier die Struktur der XML Datei:
Code: Alles auswählen
<?xml version="1.0"?>
<dat from="2013-06-10 14:19:00" to="2013-06-10 14:19:59" qdate="2013-06-10 14:19:48">
<dl id="12345678" Off="1" saving="1" tstamp="2013-06-10 14:19:00">
<device type="iv" key="1" id="123456789">
<mv type="AA" value="123"/>
<mv type="BB" value="234"/>
<mv type="CC" value="567"/>
<mv type="DD" value="890"/>
</device>
<device type="iv" key="2" id="2468123455">
<mv type="AA" value="123"/>
<mv type="BB" value="234"/>
<mv type="CC" value="567"/>
<mv type="DD" value="890"/>
</device>
</dl>
<dl id="24689765" Off="1" saving="1" tstamp="2013-06-10 14:19:00">
<device type="iv" key="1" id="123456789">
<mv type="AA" value="123"/>
<mv type="BB" value="234"/>
<mv type="CC" value="567"/>
<mv type="DD" value="890"/>
</device>
<device type="iv" key="2" id="2468123455">
<mv type="AA" value="123"/>
<mv type="BB" value="234"/>
<mv type="CC" value="567"/>
<mv type="DD" value="890"/>
</device>
</dl>
</dat>
Code: Alles auswählen
mport urllib.request
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
xmlload = urllib.request.urlopen('http:xxxx')
tree = ET.parse(xmlload)
root = tree.getroot()
for child_dl in root:
dl_id = child_dl.get('id')
dl_timestamp = child_dl.get('timestamp')
for child_device in child_dl:
device_type = child_device.get('type')
device_id = child_device.get('id')
for child_mv in child_device:
mv_type = child_mv.get('type')
mv_value = child_mv.get('value')
if mv_type == ('AA'):
U_DC = mv_value
elif mv_type == ('BB'):
I_DC = mv_value
print (dl_timestamp , "," , device_id , "," , device_type , "," , AA , "," , BB)
Ich glaube ich mache hier einen grundsätzlichen Denkfehler. Was denkt Ihr gehe ich das Ganze falsch an, oder könnte ich mir zum Beispiel auch ein Array bilden mit den Bezeichnungen und den Werten hinter "mv"?
Vielen Dank für Eure Hilfe