Python - XML-Verarbeitung

Hallo dort, aufstrebende Programmierer! Heute tauchen wir in die faszinierende Welt der XML-Verarbeitung mit Python ein. Als euer freundlicher Nachbar und Informatiklehrer freue ich mich, euch auf dieser Reise zu führen. Also, holt euch eine Tasse eures Lieblingsgetränks und los geht's!

Python - XML Processing

Was ist XML?

Bevor wir in die Coding-Part einsteigen, lassen uns verstehen, was XML eigentlich ist. XML steht für eXtensible Markup Language. Es ist wie ein Cousin von HTML, aber mit einem anderen Zweck. Während HTML zum Anzeigen von Daten verwendet wird, wird XML zum Speichern und Transportieren von Daten genutzt.

Stellt euch XML als eine Möglichkeit vor, Informationen in einer baumartigen Struktur zu organisieren. Es verwendet Tags (wie <tag>) zur Definition von Elementen, ähnlich wie ihr Dateien in Ordnern auf eurem Computer organisieren könnt.

Hier ist ein einfaches Beispiel von XML:

<bookstore>
<book>
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<year>1997</year>
</book>
</bookstore>

In diesem Beispiel haben wir einen Buchladen, der Informationen über ein Buch enthält. Das Buch hat einen Titel, einen Autor und ein Veröffentlichungsjahr. Einfach, nicht wahr?

XML-Parser-Architekturen und APIs

Nun, da wir wissen, was XML ist, reden wir darüber, wie wir es in Python verwenden können. Python bietet mehrere Möglichkeiten, XML-Daten zu parsen (zu lesen und zu interpretieren). Die drei Hauptansätze sind:

  1. SAX (Simple API for XML)
  2. DOM (Document Object Model)
  3. ElementTree

Jeder dieser Ansätze hat seine eigenen Stärken und Anwendungsfälle. Lassen uns diese eine nach der anderen erkunden!

XML mit SAX-APIs parsen

SAX, oder Simple API for XML, ist ein ereignisgetriebener Parser. Er liest die XML-Datei sequenziell und löst Ereignisse aus, wenn er Elemente, Attribute oder Text findet.

Hier ist ein einfaches Beispiel für die Verwendung von SAX in Python:

import xml.sax

class BuchHandler(xml.sax.ContentHandler):
def startElement(self, name, attrs):
self.current = name
def characters(self, content):
if self.current == "title":
print(f"Buchtitel: {content}")

handler = BuchHandler()
parser = xml.sax.make_parser()
parser.setContentHandler(handler)
parser.parse("bücher.xml")

In diesem Beispiel erstellen wir eine BuchHandler-Klasse, die definiert, was passieren soll, wenn der Parser verschiedene Teile der XML findet. Wenn er ein "title"-Element findet, gibt er den Titel aus.

XML mit DOM-APIs parsen

DOM, oder Document Object Model, lädt die gesamte XML-Datei in den Speicher und represents sie als eine baumartige Struktur. Dies ermöglicht es Ihnen, einfach im Dokument zu navigieren und es zu verändern.

So könnt ihr DOM in Python verwenden:

import xml.dom.minidom

doc = xml.dom.minidom.parse("bücher.xml")
titel = doc.getElementsByTagName("title")
for title in titel:
print(f"Buchtitel: {title.firstChild.data}")

Dieser Code parst die XML-Datei, findet alle "title"-Elemente und gibt ihren Inhalt aus.

ElementTree XML API

ElementTree ist eine leichtere und pythonischere Methode, um mit XML zu arbeiten. Es ist oft die bevorzugte Wahl für viele Python-Entwickler aufgrund seiner Einfachheit und Effizienz.

Hier ist ein Beispiel mit ElementTree:

import xml.etree.ElementTree as ET

baum = ET.parse("bücher.xml")
wurzel = baum.getroot()

for buch in wurzel.findall("book"):
titel = buch.find("title").text
print(f"Buchtitel: {titel}")

Dieser Code tut das gleiche wie unsere vorherigen Beispiele, aber auf eine direktere Weise.

Eine XML-Datei erstellen

Nun versuchen wir, eine XML-Datei von Grund auf mit ElementTree zu erstellen:

import xml.etree.ElementTree as ET

wurzel = ET.Element("bookstore")
buch = ET.SubElement(wurzel, "book")
ET.SubElement(buch, "title").text = "Der Hitchhiker's Guide to the Galaxy"
ET.SubElement(buch, "author").text = "Douglas Adams"
ET.SubElement(buch, "year").text = "1979"

baum = ET.ElementTree(wurzel)
baum.write("neue_bücher.xml")

Dieses Skript erstellt eine neue XML-Datei mit einem Bucheintrag. Es ist, als wäre man ein Autor, aber anstatt ein Buch zu schreiben, schreibst du XML!

Eine XML-Datei parsen

Wir haben bereits Beispiele zur Analyse von XML-Dateien gesehen, aber lassen uns einen umfassenderen Beispiel mit ElementTree ansehen:

import xml.etree.ElementTree as ET

baum = ET.parse("bücher.xml")
wurzel = baum.getroot()

for buch in wurzel.findall("book"):
titel = buch.find("title").text
autor = buch.find("author").text
jahr = buch.find("year").text
print(f"'{titel}' von {autor}, veröffentlicht im {jahr}")

Dieses Skript liest unsere XML-Datei und gibt formatierte Informationen über jedes Buch aus.

Eine XML-Datei ändern

Schließlich ändern wir eine bestehende XML-Datei:

import xml.etree.ElementTree as ET

baum = ET.parse("bücher.xml")
wurzel = baum.getroot()

for buch in wurzel.findall("book"):
jahr = int(buch.find("year").text)
if jahr < 2000:
buch.find("year").text = str(jahr + 100)

baum.write("geänderte_bücher.xml")

Dieses Skript fügt den Veröffentlichungsdatum jedes Buches, das vor 2000 veröffentlicht wurde, 100 Jahre hinzu. Es ist, als würden wir diese Bücher in die Zukunft schicken!

Hier ist eine Tabelle, die die Hauptmethoden zusammenfasst, die wir verwendet haben:

Methode Beschreibung
ET.parse() Parse eine XML-Datei
ET.Element() Erstelle ein neues Element
ET.SubElement() Erstelle ein neues Kind-Element
element.findall() Finde alle übereinstimmenden Unterlemente
element.find() Finde das erste übereinstimmende Unterlement
element.text Hol oder setze den Text eines Elements
baum.write() Schreibe den XML-Baum in eine Datei

Und so ist es! Wir haben die Grundlagen der XML-Verarbeitung in Python abgedeckt. Denkt daran, Praxis macht den Meister, also seid nicht ängstlich, mit diesen Beispielen zu experimentieren. XML mag am Anfang etwas schrecklich erscheinen, aber sobald ihr den Dreh raus habt, werdet ihr feststellen, dass es ein leistungsfähiges Werkzeug zur Arbeit mit strukturierten Daten ist.

Happy coding, zukünftige XML-Meister! ??

Credits: Image by storyset