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.