Seite 1 von 1

Einlesen einer XML Datei mit Dom

Verfasst: Sonntag 24. Mai 2015, 16:04
von Mungo1981
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

Re: Einlesen einer XML Datei mit Dom

Verfasst: Sonntag 24. Mai 2015, 16:12
von Sirius3
@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')

Re: Einlesen einer XML Datei mit Dom

Verfasst: Sonntag 24. Mai 2015, 16:27
von Mungo1981
:D Danke für die Umgehende Hilfe. :D
:lol: Das hat diesmal auf anhieb geklappt :lol:
Mungo1981

Re: Einlesen einer XML Datei mit Dom

Verfasst: Sonntag 24. Mai 2015, 16:39
von Mungo1981
OK.
Also noch einmal DANKE

Ok das hätten wir also aber wie kann ich nun die Liste der Punkte erhalten

Re: Einlesen einer XML Datei mit Dom

Verfasst: Sonntag 24. Mai 2015, 16:50
von Sirius3
Genauso, wie Du die Namen erhältst.

Re: Einlesen einer XML Datei mit Dom

Verfasst: Sonntag 24. Mai 2015, 16:51
von Mungo1981
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 !!!