Seite 1 von 1

Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Sonntag 8. April 2018, 16:48
von Felix Eckert
Hallo,

ich versuche momentan für ein Projekt spezifische tags einer xml auszulesen.
Ich weis allerdings nur wie man alle auf einmal ausgibt (das heißt das ich nicht weis wie man nur einen ausgibt)
Und da ich nicht der "beste" Programmierer bin habe ich keine Ahnung wie ich dies machen könnte.

hier ist die xml

Code: Alles auswählen

<?xml version="1.0" ?>
<DATA>
<name> Max </name>
<nachname> Mustermann </nachname>
</DATA>

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Sonntag 8. April 2018, 18:19
von Sirius3
@Felix Eckert: die Frage ist halt, wie Du das eine Element identifizieren willst, dann ist das Suchen und Finden auch kein Problem mit `find`. Was hast Du denn schon versucht?

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Montag 9. April 2018, 16:46
von Felix Eckert
Das ist ja das ding, ich arbeite sehr wenig mit XML und kenne mich deshalb garnicht mit dem xml package aus :K . aber danke fr den tipp mit find!
UPDATE: Ich habe nun einwenig mit dem find rumprobiert und damit keine Lösung gefunden :(

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Montag 9. April 2018, 22:19
von Sirius3
@Felix Eckert: weil ich nicht verstehe, was Du machen willst, bin ich auch ratlos. Wenn Dir die Beispiele in der Dokumentation nicht weiterhelfen, :K

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Dienstag 10. April 2018, 14:20
von Felix Eckert
Ich habe jetzt ne weile gesucht, habe ne methode auf stackabuse gefunden, musste zwar nen bisschen umplanen aber jetzt funktioniert es :D.
Trotzdem danke für den Tipp!

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Dienstag 10. April 2018, 14:27
von Felix Eckert
Hier der Code für die Leute die auch Probleme haben:

Code: Alles auswählen

from xml.dom import minidom

# XML laden
mydoc = minidom.parse('doc.xml')

items = mydoc.getElementsByTagName('tag_name')

# Eine spezifische Attribute
print(items[0].attributes['name'].value)

# Alle Attribute
for elem in items:  
    print(elem.attributes['Attribute'].value)

# Die Daten von einem Spezifischen tag
print(items[0].firstChild.data)  
print(items[1].childNodes[0].data)

# Alle Daten
for elem in items:  
    print(elem.firstChild.data)

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Dienstag 10. April 2018, 15:00
von __deets__
Du solltest statt minidom ElementTree verwenden. Damit ist das arbeiten deutlich einfacher. Unter anderem weil der Whitespace zwischen den Tags nicht einfach auch als DOM-Elemente auftaucht.

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Dienstag 10. April 2018, 15:43
von Felix Eckert
Ich werde nochmals reingucken wie ich das anders machen kann weil das mit der "Navigation" mit Minidom auch umständlich ist.

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Dienstag 10. April 2018, 16:08
von Sirius3
@Felix Eckert: hier das selbe mit ElementTree, wobei das fast exakt so auch in der Dokumentation steht.

Code: Alles auswählen

import xml.etree.ElementTree as et

document = et.ElementTree(file="doc.xml")

# Erstes Element <tag_name>
item = document.find('.//tag_name')

# Eine spezifische Attribute
print(item.attrib['name'])

# Die Daten von einem Spezifischen tag
print(items.text)

# Alle Elemente
items = document.findall('.//tag_name')
for elem in items:
    print(elem.attrib)
    print(elem.text)

# Inhalt von erstem Element
print(document.findtext('.//tag_name'))

Re: Python3 - Aus XML bestimmten tag ausgeben

Verfasst: Mittwoch 11. April 2018, 15:37
von Felix Eckert
Sirius3 hat geschrieben:@Felix Eckert: hier das selbe mit ElementTree, wobei das fast exakt so auch in der Dokumentation steht.

Code: Alles auswählen

import xml.etree.ElementTree as et

document = et.ElementTree(file="doc.xml")

# Erstes Element <tag_name>
item = document.find('.//tag_name')

# Eine spezifische Attribute
print(item.attrib['name'])

# Die Daten von einem Spezifischen tag
print(items.text)

# Alle Elemente
items = document.findall('.//tag_name')
for elem in items:
    print(elem.attrib)
    print(elem.text)

# Inhalt von erstem Element
print(document.findtext('.//tag_name'))
Vielen dank! Das macht es einfacher mit auslesen! dann habe ich nicht mehr 30 zeilen mit aulese code! :D :D