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.