Ich habe bisher wenig mit Python gemacht, und eine XML Auslesen noch nie.
Und zwar würde ich gerne erst : /root/alarm[0]/aktiv auslesen und dan /root/alarm[1]/aktiv. Also beim ersten würde ich das Ergebnis "true" erwarten und beim zweite das Ergebnis "false".
Wenn das was in dem Python Skript steht richtig verstanden habe ist es volgender Ablauf:
1. die Datei wird geparst xmlData = etree.parse(inFile)
2. Erstellen einer Liste mit den Adressen aller gefundenen alarm Tags messages = xmlData.findall("alarm")
3. Inerhalb von alarm nach dem Tag "aktiv" suchen und dessen wert Ausgeben Wert = readXML(messages, "aktiv")
4. Als Wert bekomme ich "false".
Also liest der den zweiten alarm aus.
Meine Idee war es nun da messeges eine Liste enthält mit einem Index zu arbeiten. Also habe ich die Zeile so geändert Wert = readXML(messages[0], "aktiv") um den ersten alarm zu erhalten.
Leider geht das nicht.
Als antwort erhalte ich dann:
Code: Alles auswählen
Ausgabe von /var/www/data/alarmClock.xml
findall alarm [<Element alarm at 0x1ca3ad0>, <Element alarm at 0x1ca3af8>, <Element alarm at 0x1ca3b20>, <Element alarm at 0x1ca3b48>, <Element alarm at 0x1ca3b70>, <Element alarm at 0x1ca3b98>, <Element alarm at 0x1ca3bc0>]
messages ist vom Typ <class 'list'>
Ausgabe von /var/www/data/alarmClock.xml
readXML mode None
Wert ist vom Typ <class 'NoneType'>
Code: Alles auswählen
<root>
<alarm>
<aktiv>true</aktiv>
<repeat>false</repeat>
<mode>standard</mode>
<monday>false</monday>
<tuesday>false</tuesday>
<wednesday>false</wednesday>
<thursday>false</thursday>
<friday>false</friday>
<saturday>false</saturday>
<sunday>false</sunday>
<time>00:00</time>
</alarm>
<alarm>
<aktiv>false</aktiv>
<repeat>false</repeat>
<mode>standard</mode>
<monday>true</monday>
<tuesday>false</tuesday>
<wednesday>false</wednesday>
<thursday>false</thursday>
<friday>false</friday>
<saturday>false</saturday>
<sunday>false</sunday>
<time>00:00</time>
</alarm>
</root>
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
from lxml import etree
import time
def readXML(a, Text):
for b in a:
c = b.findtext(Text)
return c
# Konfiguration
inFile = "/var/www/data/alarmClock.xml" # XML-Datei
# XML-Datei einlesen
xmlData = etree.parse(inFile)
messages = xmlData.findall("alarm")
print("Ausgabe von ", inFile)
print("findall alarm ", messages)
print("messages ist vom Typ", type(messages))
Wert = readXML(messages, "aktiv")
print("Ausgabe von ", inFile)
print("readXML mode ", Wert)
print("Wert ist vom Typ", type(Wert))
Vielen Dank.