XML (Extensible Markup Language) ist ein gängiges Format zum Speichern und Übertragen von Daten zwischen verschiedenen Plattformen und Systemen. Als Python-Entwickler, der an Webdiensten, Konfigurationsdateien oder Datenübertragungen arbeitet, müssen Sie wissen, wie XML-Dateien analysiert werden. Sie können Python-Bibliotheken verwenden, um die XML-Analyse einfach und schnell zu gestalten.

Dieser Artikel behandelt verschiedene Möglichkeiten zum Parsen von XML in Python, sowohl integrierte Bibliotheken als auch externe Tools. Sie lernen, wie Sie XML-Dateien aller Größen verarbeiten, XML in Wörterbücher konvertieren und analysierte Daten in CSV und JSON speichern. Wir werden uns auch mit dem Parsen von ungültigem oder fehlerhaftem XML mit weniger anspruchsvollen Tools befassen.

Lassen Sie uns in die Details der XML-Analyse in Python eintauchen.

Table of Contents:

  1. Was ist XML?
  • Warum XML verwenden?
  • Was ist XML-Parsing?
  1. XML mit den integrierten Bibliotheken von Python analysieren
  • XML mit xml.etree.ElementTree analysieren
  • XML mit xml.dom.minidom analysieren
  1. Arbeiten mit externen XML-Parsing-Bibliotheken
  • XML mit lxml parsen
  • So behandeln Sie fehlerhaftes XML mit BeautifulSoup
  1. So konvertieren Sie XML in Python in ein Wörterbuch
  • Verwenden von xmltodict
  • Entwirren verwenden
  1. So speichern Sie analysierte XML-Daten
  • Exportieren in CSV mit Pandas
  • Speichern von Daten im JSON-Format
  1. Umgang mit großen XML-Dateien
  • Stream-Parsing mit iterparse
  1. Abschließende Überlegungen
  2. Häufig gestellte Fragen (FAQs)

Was ist XML?

XML oder Extensible Markup Language ist ein Datenformat zum Speichern und Austauschen von Daten zwischen verschiedenen Systemen. Es ist sowohl für Menschen als auch für Maschinen lesbar und wird deshalb in Webdiensten, Konfigurationsdateien, Strings ÜbersetzungUnd vieles mehr.

Warum XML?

XML wird verwendet, weil es eine flexible und übersichtliche Möglichkeit zur Darstellung komplexer Daten bietet. Im Gegensatz zu CSV oder einfachem Text können Sie mit XML eine Hierarchie von Elementen und Attributen erstellen, sodass die Daten leichter zu verstehen und zu bearbeiten sind.

Hier sind einige Gründe, warum XML bevorzugt wird:

  • Plattformunabhängigkeit: XML kann mit jedem Betriebssystem und jeder Programmiersprache verwendet werden.
  • Skalierbarkeit: XML-Dateien können einfache und komplexe Datenstrukturen enthalten.
  • Ablesbarkeit: Nicht-Entwickler können XML lesen und verstehen.

Was ist XML-Parsing?

XML-Parsing ist der Prozess des Lesens und Verarbeitens eines XML-Dokuments zum Extrahieren von Daten. In Python können Sie durch das Parsen von XML XML-Dokumente durchsuchen, Daten extrahieren und nach Bedarf ändern. Dies ist besonders wichtig, wenn Sie mit APIs oder anderen Datenaustauschsystemen arbeiten, die XML als Protokoll verwenden.

Python verfügt über integrierte Bibliotheken und Tools von Drittanbietern zum Parsen von XML-Daten, egal ob es sich um eine kleine Konfigurationsdatei oder eine große Datenquelle handelt. In den nächsten Abschnitten erfahren Sie, wie das geht.

XML mit den integrierten Bibliotheken von Python analysieren

Python verfügt über leistungsstarke integrierte Bibliotheken für die Arbeit mit XML-Daten. Mit diesen Bibliotheken können Sie XML-Dateien analysieren, die benötigten Daten extrahieren und die Daten nach Bedarf bearbeiten. Zwei beliebte Bibliotheken in Python zum Parsen von XML sind xml.etree.ElementTree und xml.dom.minidom.

XML parsen mit xml.etree.ElementTree

xml.etree.ElementTree ist eine leichtgewichtige Bibliothek, die standardmäßig mit Python mitgeliefert wird. Es handelt sich um eine XML-Analysebibliothek für Python, die zum einfachen Analysieren und Navigieren in XML-Dateien entwickelt wurde.

So könnten Sie beispielsweise verwenden ElementTree So analysieren Sie eine XML-Zeichenfolge:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
importieren xml.etree.ElementTree as ET

# Beispiel XML-Daten
xml_data = "" "


Drahtlose Maus
29.99
Elektronik


Bürostuhl
89.99
Möbel


"" "

# Analysieren Sie die XML-Daten
root = ET.fromstring(xml_data)

# Daten abrufen und ausdrucken
für PRODUKTE in root.findall('Produkt'):
Name = Produkt.finden('Süßkartoffel').Text
Preis = Produkt.Finden('Preis').Text
Kategorie = Produkt.Finden(‚Kategorie‘).Text
drucken(f"Produktname: {Name}, Preis: ${Preis}, Kategorie: {Kategorie}")

In diesem Beispiel importieren wir zunächst die ElementTree Modul. Wir können das Stammelement einer XML erhalten, indem wir den XML-String mit fromstring() Methode. Wir verwenden dann die findall() und find() Methoden zum Suchen nach einem bestimmten Tag oder zum Extrahieren von Text aus Tags.

XML mit xml.dom.minidom analysieren

xml.dom.minidom ist eine weitere integrierte Bibliothek, die das Document Object Model (DOM) zum Parsen und Bearbeiten von XML verwendet. Sie ist leistungsfähiger und flexibler, kann aber weniger benutzerfreundlich sein als ElementTree in manchen Fällen.

Dieselben XML-Daten können mit Minidom wie folgt analysiert werden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
für xml.dom.minidom importieren Zeichenfolge parsen

# Beispiel XML-Daten
xml_data = "" "


Drahtlose Maus
29.99
Elektronik


Bürostuhl
89.99
Möbel


"" "

# Analysieren Sie die XML-Daten
dom = parseString(xml_daten)

# Daten abrufen und ausdrucken
Produkte = dom.getElementsByTagName('Produkt')
für PRODUKTE in Produkte:
Name = Produkt.getElementsByTagName('Süßkartoffel')[0].untergeordnete Knoten[0].nodeValue
Preis = Produkt.getElementsByTagName('Preis')[0].untergeordnete Knoten[0].nodeValue
Kategorie = Produkt.getElementsByTagName(‚Kategorie‘)[0].untergeordnete Knoten[0].nodeValue
drucken(f"Produktname: {Name}, Preis: ${Preis}, Kategorie: {Kategorie}")

In diesem Beispiel parseString() wird verwendet, um das XML in ein DOM-Objekt zu laden. Wir verwenden dann getElementsByTagName() zu finden, die product, name, price und category Elemente und childNodes[0].nodeValue um den Text zu extrahieren. Während minidom bietet detaillierte Kontrolle, ist aber im Allgemeinen weniger effizient als ElementTree für einfache Aufgaben.

Arbeiten mit externen XML-Parsing-Bibliotheken

Wenn Sie mit XML-Daten in Python arbeiten, möchten Sie für einfache Aufgaben vielleicht bei den integrierten Bibliotheken bleiben. Für komplexere Anforderungen oder eine bessere Handhabung von fehlerhaftem XML können Sie jedoch eine andere Bibliothek wählen, die mehr Funktionen und Flexibilität bietet. In diesem Teil werden wir zwei bekannte externe XML-Parsing-Bibliotheken besprechen: lxml und BeautifulSoup.

XML mit lxml parsen

Sie können auch lxml Dies ist eine sehr gute Bibliothek, wenn Sie mit XML- und HTML-Dokumenten arbeiten. Sie bietet gute Unterstützung für XPath und XSLT und könnte daher ein leistungsstarker XML-Prozessor sein.

Um mit lxml zu beginnen, müssen Sie es installieren. Sie können dies über pip tun:

1
pip lxml installieren

Hier ist ein Beispiel für die Verwendung lxml zum Parsen von XML-Daten:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
für lxml importieren Etree

# Beispiel XML-Daten
xml_data = "" "


Drahtlose Maus
29.99
Elektronik


Bürostuhl
89.99
Möbel


"" "

# Analysieren Sie die XML-Daten
root = etree.fromstring(xml_data)

# Daten abrufen und ausdrucken
für PRODUKTE in root.xpath('//Produkt'):
Name = Produkt.finden('Süßkartoffel').Text
Preis = Produkt.Finden('Preis').Text
Kategorie = Produkt.Finden(‚Kategorie‘).Text
drucken(f"Produktname: {Name}, Preis: ${Preis}, Kategorie: {Kategorie}")

In diesem Beispiel verwenden wir lxml's etree Modul zum Parsen von XML. Mit dem xpath Methode können Sie leistungsstarke Abfragen schreiben, sodass Sie präzise Extraktionen aus dieser unübersichtlichen XML-Struktur durchführen können.

So behandeln Sie fehlerhaftes XML mit BeautifulSoup

BeautifulSuppe wird häufig zum Parsen von HTML verwendet, kann aber auch fehlerhaftes XML problemlos verarbeiten. Dies macht es zu einer guten Wahl für den Umgang mit XML-Dokumenten, die möglicherweise nicht wohlgeformt sind.

So verwenden Sie BeautifulSoup für XML-Parsing installieren Sie die Bibliothek zusammen mit einem Parser wie lxml:

1
pip installiere beautifulsoup4 lxml

Hier ist ein Beispiel für die Verwendung von BeautifulSoup zum Parsen von XML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
für bs4 importieren BeautifulSuppe

# Beispiel-XML-Daten mit einem fehlerhaften Element
xml_data = "" "


Drahtlose Maus
29.99
Elektronik


Bürostuhl
89.99
Möbel


"" "

# Analysieren Sie die XML-Daten
Suppe = Schöne Suppe(xml_data, „lxml-xml“)

# Daten abrufen und ausdrucken
für PRODUKTE in Suppe.find_all('Produkt'):
Name = Produkt.finden('Süßkartoffel').get_text()
Preis = Produkt.Finden('Preis').get_text()
Kategorie = Produkt.Finden(‚Kategorie‘).get_text()
drucken(f"Produktname: {Name}, Preis: ${Preis}, Kategorie: {Kategorie}")

In diesem Fall BeautifulSoup hilft beim Parsen unvollständiger oder beschädigter XML-Dokumente. Dies ist insbesondere dann nützlich, wenn Sie auf XML stoßen, das von den üblichen Praktiken zum Schreiben von XML abweicht.

Im nächsten Teil schauen wir uns an, wie man XML-Daten zur besseren Bearbeitung in Python-Wörterbücher umwandelt.

So konvertieren Sie XML in Python in ein Wörterbuch

Das Arbeiten mit XML-Daten kann schwierig sein, wenn einige Elemente davon bearbeitet oder extrahiert werden müssen. Eine gängige Problemumgehung besteht darin, XML in ein Python-Wörterbuch zu konvertieren. Ein Wörterbuch wird zum Speichern und Abrufen von Daten als Schlüssel-Wert-Paare verwendet, was uns den Umgang mit Daten erleichtert. Sehen wir uns zwei beliebte Bibliotheken zum Konvertieren von XML in ein Python-Wörterbuch an: xmltodict und untangle.

Verwenden von xmltodict

xmltodict ist eine einfache Bibliothek, die XML-Daten mit wenigen Codezeilen in ein Wörterbuch konvertieren kann. Sie vereinfacht und beschleunigt die Verarbeitung von XML-Daten.

Um zu beginnen, müssen Sie die Bibliothek mit pip installieren:

1
pip install xmltodict

Hier ist ein Beispiel für die Verwendung xmltodict So konvertieren Sie XML in ein Wörterbuch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
importieren xmltodict

# Beispiel XML-Daten
xml_data = "" "


Notizbuch
5.99
100


Bleistift
0.99
500


"" "

# XML in ein Wörterbuch konvertieren
data_dict = xmltodict.parse(xml_data)

# Daten abrufen und ausdrucken
für Artikel in Daten_Wörterbuch['speichern']['Artikel']:
Name = Artikel['Süßkartoffel']
Preis = Artikel['Preis']
Menge = Artikel['Menge']
drucken(f"Artikel: {Name}, Preis: ${Preis}, Menge: {Menge}")

In diesem Beispiel xmltodict.parse() konvertiert die XML-Daten in ein Python-Wörterbuch, sodass Sie damit wie mit einem Standardwörterbuch arbeiten können. Dadurch wird das Abrufen und Bearbeiten von Daten aus XML wesentlich einfacher.

Die richtigen untangle

Eine weitere großartige Bibliothek zum Parsen von XML in Python-Objekte ist entwirren. nicht wie xmltodict, das XML in ein Wörterbuch konvertiert, untangle wandelt das XML in Python-Objekte um, auf die Sie einfach über Attribute zugreifen können.

Installieren Sie zunächst die Bibliothek mit pip:

1
Pip installieren entwirren

Hier ist ein Beispiel für die Verwendung untangle:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
importieren entwirren

# Beispiel XML-Daten
xml_data = "" "


Notizbuch
5.99
100


Bleistift
0.99
500


"" "

# XML in Python-Objekte analysieren
Daten = entwirren.parsen(XML-Daten)

# Daten abrufen und ausdrucken
für Artikel in Datenspeicherelement:
Name = Artikel.Name.cdata
Preis = Artikel.Preis.cdata
Menge = Artikel.Menge.cdata
drucken(f"Artikel: {Name}, Preis: ${Preis}, Menge: {Menge}")

In diesem Beispiel untangle konvertiert die XML-Struktur in Python-Objekte. Jeder XML-Tag wird zu einem Attribut des Objekts und Sie können einfach auf den Inhalt zugreifen mit cdata (Zeichendaten).

Als Nächstes schauen wir uns an, wie die analysierten XML-Daten zur weiteren Verwendung in verschiedenen Formaten wie CSV oder JSON gespeichert werden.

So speichern Sie analysierte XML-Daten

Nach dem Parsen von XML-Daten werden diese im Allgemeinen in bekannteren Formaten wie CSV oder JSON gespeichert. Dies ermöglicht es Ihnen, Daten für die meisten Apps benutzerfreundlicher zu speichern, auszutauschen und zu analysieren. In diesem Teil sehen wir uns zwei Möglichkeiten zum Speichern geparster XML-Daten an: den Export in CSV mit Pandas und das Speichern als JSON.

Exportieren nach CSV mit pandas

CSV-Dateien (Comma-Separated Values) werden häufig zum Speichern tabellarischer Daten verwendet. Pythons pandas Das Paket vereinfacht das Speichern analysierter XML-Daten in einer CSV-Datei. Stellen Sie zunächst sicher, dass Pandas installiert ist:

1
Pandas installieren

Hier ist ein Beispiel für die Konvertierung von XML-Daten in eine CSV-Datei mit Pandas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
importieren xml.etree.ElementTree as ET
importieren Pandas as pd

# Beispiel XML-Daten
xml_data = "" "


Notizbuch
5.99
100


Bleistift
0.99
500


"" "

# XML analysieren
root = ET.fromstring(xml_data)

# Daten extrahieren und eine Liste von Wörterbüchern erstellen
Daten = []
für Artikel in root.findall('Artikel'):
Name = Artikel.finden('Süßkartoffel').Text
Preis = Artikel.Finden('Preis').Text
Menge = Artikel.Finden('Menge').Text
Daten.anhängen({'Name': Name, 'Preis': Preis, 'Menge': Menge})

# Liste der Wörterbücher in einen Pandas-DataFrame konvertieren
df = pd.DataFrame(Daten)

# DataFrame in einer CSV-Datei speichern
df.to_csv('store_items.csv', Index=falsch)

drucken(„Daten wurden in store_items.csv gespeichert“)

In diesem Beispiel verwenden wir xml.etree.ElementTree um die XML-Daten zu analysieren, und dann extrahieren wir relevante Informationen (wie name, price und quantity) in eine Liste von Wörterbüchern. pandas wird dann verwendet, um einen DataFrame zu erstellen und die Daten in einer CSV-Datei zu speichern.

Speichern von Daten im JSON-Format

JSON (JavaScript Object Notation) ist ein einfaches Datenformat, das in Webanwendungen und APIs verwendet wird. Python verfügt über ein integriertes Modul namens json, das analysiertes XML in JSON konvertieren kann.

So konvertieren Sie XML in JSON und speichern es in einer Datei:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
importieren xmltodict
importieren JSON

# Beispiel XML-Daten
xml_data = "" "


Notizbuch
5.99
100


Bleistift
0.99
500


"" "

# Konvertieren Sie XML mit xmltodict in ein Wörterbuch
data_dict = xmltodict.parse(xml_data)

# Wörterbuch in JSON konvertieren und in einer Datei speichern
mit XNUMXh geöffnet('store_items.json', 'w') as json_datei:
json.dump(Datendict, JSON-Datei, Einzug=4)

drucken(„Daten wurden in store_items.json gespeichert“)

In diesem Beispiel verwenden wir xmltodict um das XML in ein Wörterbuch zu konvertieren, und dann das JSON-Modul, um dieses Wörterbuch in JSON zu konvertieren. Das JSON wird in einer Datei namens store_items.json.

Als Nächstes behandeln wir den Umgang mit großen XML-Dateien.

Umgang mit großen XML-Dateien

Das Laden der gesamten Datei in den Speicher kann bei großen XML-Dateien langsam und ineffizient sein. Um dieses Problem zu lösen, sollten Sie speicherfreundliche Strategien verwenden, die eine Verarbeitung der XML-Datei in kleineren Blöcken ermöglichen. Eine effektive Methode besteht darin, die XML-Datei inkrementell zu analysieren. Dadurch wird der Speicherverbrauch reduziert und die Verarbeitungszeit für große Datensätze beschleunigt.

Stream Parsing mit iterparse

Stream Parsing ist eine effiziente Technik zum Verarbeiten großer XML-Dateien, indem diese in Blöcken verarbeitet werden, anstatt die gesamte Datei auf einmal zu lesen. Pythons iterparse Die Methode ermöglicht Ihnen, XML-Daten während der Analyse zu verarbeiten und ist daher ideal für XML-Dateien, die zu groß für den Speicher sind.

Hier ist wie iterparse funktioniert:

  1. Ereignisse analysieren: Mit iterparsekönnen Sie Ereignisse wie „Start“ oder „Ende“ definieren, um Aktionen auszulösen, wenn ein XML-Element beginnt oder endet. Dadurch haben Sie Kontrolle darüber, wie und wann jeder Teil des XML verarbeitet wird.
  2. Speicherverwaltung: Nachdem Sie jedes Element verarbeitet haben, können Sie es aus dem Speicher löschen, um den Speicherverbrauch zu minimieren, was bei der Verarbeitung großer XML-Dateien von entscheidender Bedeutung ist.

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
importieren xml.etree.ElementTree as ET

# Stream analysiert die XML-Datei
für Ereignis, Element in ET.iterparse(„große_datei.xml“, Ereignisse=('Ende',)):
if element.tag == 'Produkt':
# Produktdaten extrahieren
Name = Element.finden('Süßkartoffel').Text
Kategorie = Element.Finden(‚Kategorie‘).Text
Preis = Element.Finden('Preis').Text
drucken(f"Produkt: {Name}, Kategorie: {Kategorie}, Preis: {Preis}")

# Löschen Sie das verarbeitete Element aus dem Speicher
element.löschen()

Dieses Beispiel verarbeitet jeden <product> Element einzeln und zerstört dann das Objekt, um den Speicherverbrauch gering zu halten. Diese Methode ist sehr hilfreich, wenn Sie mit XML-Dateien mit Tausenden oder Millionen von Elementen arbeiten.

Abschließende Überlegungen

Python verfügt über mehrere flexible Tools für den Umgang mit XML, z. B. das integrierte xml.etree.ElementTree bis hin zu fortgeschritteneren externen Drittanbieterpaketen wie lxml und BeautifulSoup. Python kann alles erledigen, was Sie ihm vorgeben, z. B. einfaches Parsen, Konvertieren von XML in Wörterbücher oder die Verarbeitung großer und fehlerhafter Dateien.

Mit dem richtigen Tool können Sie XML schnell analysieren und entweder in CSV oder JSON formatieren. Mit den im Blog beschriebenen Methoden können Sie XML-Parsing problemlos in Python durchführen.

Weitere Tutorials dieser Art finden Sie in unserem Blog. Wenn Sie Fragen oder Feedback haben, unsere Support-Team ist hier, um Ihnen zu helfen.

Häufig gestellte Fragen (FAQs)

F: Ist Python gut zum Parsen von XML geeignet?

Ja, Python eignet sich hervorragend zum Parsen von XML. Es verfügt über integrierte Bibliotheken wie xml.etree.ElementTree und xml.dom.minidom, die das Parsen von XML einfach und effizient machen. Bibliotheken von Drittanbietern wie lxml und BeautifulSoup hingegen verfügen über erweiterte Funktionen, die speziell für den Umgang mit komplexen oder fehlerhaften XML-Daten entwickelt wurden.

F: Welche ist die beste Python-Bibliothek für die XML-Analyse?

Welche Bibliothek die beste ist, hängt von den jeweiligen Anforderungen ab. Für einfache Dinge reicht oft ElementTree. Wenn Sie schlecht formatiertes XML verarbeiten, die Verarbeitungsgeschwindigkeit erhöhen usw. müssen, sind die Plugins lxml oder BeautifulSoup besser geeignet.

F: Wie kann ich XML in Python in ein Wörterbuch konvertieren?

Verwenden Sie Bibliotheken wie xmltodict or entwirren zum einfachen Konvertieren von XML in ein Python-Wörterbuch. Die Bibliotheken bieten eine einfache Möglichkeit, XML-Daten in Python-Wörterbücher zu konvertieren, sodass Sie problemlos mit Ihren Daten interagieren und sie verwenden können.