Einlesen einer XML Datei mit Dom

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Liebe Community,
Ich habe ein Problem mit Dom unter Python
Es geht darum einen Text aus einer Node einzulesen:

Dies ist der Inhalt meiner XML Datei:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<BildBeschreibung>
	<Dreieck>
		<Name>666</Name>		
		<Farbe>000000</Farbe>
		<Punkte>
			<Punkt id="1">
				<X>123</X>
				<Y>12</Y>
			</Punkt>
			<Punkt id="2">
				<X>120</X>
				<Y>130</Y>
			</Punkt>
			<Punkt id="3">
				<X>400</X>
				<Y>300</Y>
			</Punkt>
		</Punkte>
		
	</Dreieck>
</BildBeschreibung>
und dass ist der Code der schon einmal nicht klappt:

Code: Alles auswählen

 datei = open(name, 'r')
    dom = xml.dom.minidom.parse(datei)
    dreiecke = dom.getElementsByTagName("Dreieck")
    for dreieck in dreiecke:
        nameR = dreieck.getElementsByTagName("Name")
        for namee in nameR
           print nameR[0].nodeValue
Am Anfang würde ich gerne den "Namen" auslesen

Ich erhalte aber nur immer None
Zuletzt geändert von Mungo1981 am Sonntag 24. Mai 2015, 16:20, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Mungo1981: Statt DOM sollest Du die ElementTree-API verwenden, die Dir das Leben stark vereinfacht:

Code: Alles auswählen

from xml.etree import ElementTree as ET
bild = ET.parse(name)
for dreieck in bild.findall('.//Dreieck'):
    print dreieck.findtext('Name')
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

:D Danke für die Umgehende Hilfe. :D
:lol: Das hat diesmal auf anhieb geklappt :lol:
Mungo1981
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

OK.
Also noch einmal DANKE

Ok das hätten wir also aber wie kann ich nun die Liste der Punkte erhalten
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Genauso, wie Du die Namen erhältst.
Mungo1981
User
Beiträge: 131
Registriert: Montag 27. August 2012, 19:05

Danke und hier noch einmal der vollständig richtige Code:

Code: Alles auswählen

name= askopenfilename()
    bild = ET.parse(name)
    for dreieck in bild.findall('.//Dreieck'):
        print dreieck.findtext('Name')
        print dreieck.findtext('Farbe')
        for punkte in dreieck.findall('Punkte'):
            for punkt in punkte.findall('Punkt'):
                print " Der X Wert ist: ", punkt.findtext('X')
                print " Der Y Wert ist: ", punkt.findtext('Y')
DANKE !!!
Antworten