Seite 1 von 2
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 16:10
von __blackjack__
@yuyu: Ja lassen sie sich. Lies doch einfach mal die Dokumentation zum `ElementTree`-Modul. Die fängt mit einem Tutorial an.
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 17:27
von snafu
@yuyu:
findall() unterstützt auch XPath-Syntax. Das ist für komplexere Abfragen meist besser geeignet, anstatt den Baum händisch zu durchlaufen. Im schon erwähnten Tutorial findest du die entsprechende Stelle hier:
https://docs.python.org/3/library/xml.e ... th-support
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 18:17
von yuyu
Tutorial durchgegangen.
Folgendes Beispiel funktioniert am kleinen Beispiel, aber nicht am größerern Beispiel.
Code: Alles auswählen
import xml.etree.ElementTree as ET
tree = ET.parse('c:/input.xml')
for elem in tree.iter():
if elem.tag == 'Name':
print (elem.text)
if elem.tag == 'Age':
print (elem.text)
Ich habe ein Root mit vielen Unterstrukturen.
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 18:40
von snafu
yuyu hat geschrieben: Samstag 15. Dezember 2018, 18:17
Tutorial durchgegangen.
Wohl eher überflogen als durchgegangen in der kurzen Zeit...
Wie schon erwähnt sind komplexe Abfragen mit der XPath-Syntax möglich:
Code: Alles auswählen
# Alle Namen auf allen Ebenen
names = root.findall('.//Name')
# Alle Altersangaben auf allen Ebenen
ages = root.findall('.//Age')
Im Gegensatz zu deinem Ansatz werden hierbei nicht nur die direkten Kind-Elemente angeschaut, sondern auch die tiefer verschachtelten.
Findet sich beim Link aus meinem vorherigen Post in der Tabelle (Beschreibung in der vierten Spalte). Sofern man da mal reinschauen möchte...
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 20:32
von yuyu
Hallo,
mit:
Code: Alles auswählen
import xml.etree.ElementTree as ET
tree = ET.parse('c:/data.xml')
root = tree.getroot()
names = root.findall('.//Name')
print (names)
bekomme ich und nicht den text vom tag:
[<Element 'Name' at 0x009116F0>, <Element 'Name' at 0x009117B0>, <Element 'Name' at 0x00911870>]
Wenn ich das gleiche auf das eigentliche XML loslasse, dann sehe ich nur zwei Zeiche in der Ausgabe: [ ]
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 21:24
von yuyu
Beim Debuggen ist mir gerade aufgefallen, das Python für Tags mit Sonderzeichen (Minus), also z.B. Zeichen-Kette beides getrennt versucht zu lesen?
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 21:42
von Sirius3
@yuyu: da hast Du wohl etwas falsch gemacht. Ohne aber endlich Dein richtiges XML und deinen richtigen Code zu kennen, kann man da schlecht helfen.
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 22:51
von yuyu
Mein Problem lässt sich so zusammenfassen:
1. XML-Tag A suchen
2. Wenn A gefunden, dann XML-TAG Text von B und C ausgeben (falls vorhanden)
3. Wiederhole 1. solange bis Dateiende
Ehrlich weiss ich noch immer nicht, welche Funktion dafür am besten wäre
Re: XML-Datei auslesen
Verfasst: Samstag 15. Dezember 2018, 23:39
von yuyu
ich vermute, dass folgendes vom Prinzip passen könnte, leider funktioniert das nur am kl. Beispiel bei mir.
import xml.etree.ElementTree as ET
tree = ET.parse('c:/test.xml')
root = tree.getroot()
for element in root.findall(".//animal"):
nick = element.find("Nick").text
print (nick)
Re: XML-Datei auslesen
Verfasst: Sonntag 16. Dezember 2018, 01:08
von snafu
yuyu hat geschrieben: Samstag 15. Dezember 2018, 23:39
ich vermute, dass folgendes vom Prinzip passen könnte, leider funktioniert das nur am kl. Beispiel bei mir.
Soll da jetzt eine geheime Frage enthalten sein...?
Wie gesagt: Ab diesem Punkt bringt nur noch der Original-Code etwas oder zumindest eine Struktur, die ihm sehr nahe kommt. Ansonsten musst du dich wohl selber durchhangeln. Die Grundlagen dürftest du ja nun drauf haben.