ich suche eine effiziente Methode um aus den Attributen der Elemente bestimmte Daten auszulesen.
Im Moment bin ich an dieser Stelle angekommen.
Erst mal die Struktur der XML Datei:
[codebox=xml file=Unbenannt.xml]
<data show="------">
<section unit="A" unitTrigger="001" unitTargetIp="10.0.0.11" unitTargetPort="51000">
<event>
<trigger name="" value="666" />
<target ip="192.168.0.5" port="6000" command="abc" value="75" />
</event>
<event>
<trigger name="switch_05" value="1" />
<target ip="192.168.0.5" port="6000" command="efg" value="10" />
</event>
<event>
<trigger name="" value="666" />
<target ip="192.168.0.18" port="8800" command="hij" value="1" />
</event>
</section>
<section unit="B" unitTrigger="002" unitTargetIp="10.0.0.11" unitTargetPort="50000">
<event>
<trigger name="" value="555" />
<target ip="" port="" command="lmn" value="100" />
</event>
<event>
<trigger name="" value="666" />
<target ip="" port="" command="opq" value="50" />
</event>
</section>
</data>[/code]
Mit dem nachfolgenden Python-Schnipsel möchte ich einen Wert, hier z.B. 666
aus dem Element 'trigger' Attribute 'value' finden.
Das soll so Ressourcen schonend wie 'sinnvoll möglich' gehen.
Es ist so,
es kommen etwa 150 Trigger-Werte/Sekunde in das Programm und ich möchte eine Vorauswahl treffen ob die Weiterverarbeitung der
Daten notwendig ist, also, ob eine Reaktion (hinterlegt in XML Element <target>) auf diese Werte erfolgen soll.
Ich möchte also Rechenleistung sparen.
Gibt es einen besseren (dennoch lesbareren) Weg, das zu realisieren?
Code: Alles auswählen
import xml.etree.ElementTree as ET
tree = ET.parse('test.xml')
root = tree.getroot()
if __name__ == "__main__":
## SUCHE NACH value SO KURZ WIE GEHT
i = 0
for child in root:
for werte in root[i].iter('trigger'):
if (werte.get('value') == "666"):
print(i)
i += 1