Einen XML-Parser in Python erstellen
-
Verwenden Sie die API
ElementTree
, um ein XML-Dokument in Python zu parsen -
Verwendung des Moduls
minidom
zum Parsen eines XML-Dokuments in Python -
Verwenden Sie die Bibliothek
Beautiful Soup
, um ein XML-Dokument in Python zu parsen -
Verwenden Sie die Bibliothek
xmltodict
, um ein XML-Dokument in Python zu analysieren -
Verwenden Sie die Bibliothek
lxml
, um ein XML-Dokument in Python zu analysieren -
Verwenden Sie das Modul
untangle
, um ein XML-Dokument in Python zu analysieren -
Verwenden Sie die Bibliothek
declxml
, um ein XML-Dokument in Python zu analysieren
XML ist eine Abkürzung für eXtensible Markup Language und ist eine selbstbeschreibende Sprache, die zum Speichern und Transportieren von Daten verwendet wird. Python bietet ein Medium zum Parsen und Modifizieren eines XML-Dokuments.
Dieses Tutorial konzentriert sich auf und demonstriert verschiedene Methoden zum Parsen eines XML-Dokuments in Python.
Verwenden Sie die API ElementTree
, um ein XML-Dokument in Python zu parsen
Das Modul xml.etree.ElementTree
wird verwendet, um eine effiziente und dennoch einfache API zum Parsen des XML-Dokuments und zum Erstellen von XML-Daten zu generieren.
Der folgende Code verwendet das Modul xml.etree.ElementTree
, um ein XML-Dokument in Python zu parsen.
# >= Python 3.3 code
import xml.etree.ElementTree as ET
file1 = """<foo>
<bar>
<type foobar="Hello"/>
<type foobar="God"/>
</bar>
</foo>"""
tree = ET.fromstring(file1)
x = tree.findall("bar/type")
for item in x:
print(item.get("foobar"))
Ausgabe:
Hello
God
Hier übergeben wir die XML-Daten als String in dreifachen Anführungszeichen. Mit der Funktion parse()
des Moduls ElementTree
können wir auch ein aktuelles XML-Dokument importieren.
Das Modul cElementTree
war die C-Implementierung der ElementTree
-API, mit dem einzigen Unterschied, dass cElementTree
optimiert ist. Abgesehen davon kann es etwa 15-20 mal schneller als das Modul ElementTree
parsen und benötigt nur sehr wenig Speicher.
In Python 3.3 und höher wurde das Modul cElementTree
jedoch veraltet und das Modul ElementTree
verwendet eine schnellere Implementierung.
Verwendung des Moduls minidom
zum Parsen eines XML-Dokuments in Python
Das xml.dom.minidom
kann als grundlegende Implementierung der Document Object Model (DOM)-Schnittstelle definiert werden. Alle DOM-Anwendungen beginnen normalerweise mit dem Parsen eines XML-Objekts. Daher ist diese Methode die schnellste Methode zum Parsen eines XML-Dokuments in Python.
Der folgende Code verwendet die Funktion parse()
aus dem Modul minidom
, um ein XML-Dokument in Python zu parsen.
XML-Datei (sample1.xml):
<data>
<strings>
<string name="Hello"></string>
<string name="God"></string>
</strings>
</data>
Python-Code:
from xml.dom import minidom
xmldoc = minidom.parse("sample1.xml")
stringlist = xmldoc.getElementsByTagName("string")
print(len(stringlist))
print(stringlist[0].attributes["name"].value)
for x in stringlist:
print(x.attributes["name"].value)
Ausgabe:
2
Hello
God
Dieses Modul ermöglicht auch die Übergabe des XML als String, ähnlich der ElementTree
API. Es verwendet jedoch die Funktion parseString()
, um dies zu erreichen.
Sowohl die Module xml.etree.ElementTree
als auch xml.dom.minidom
sollen nicht sicher gegen böswillig erstellte Daten sein.
Verwenden Sie die Bibliothek Beautiful Soup
, um ein XML-Dokument in Python zu parsen
Die Bibliothek Beautiful Soup
ist für Web-Scraping-Projekte und das Herausziehen der Daten aus XML
- und HTML
-Dateien konzipiert. Beautiful Soup
ist wirklich schnell und kann alles analysieren, was ihm begegnet.
Diese Bibliothek führt sogar den Baumdurchlaufprozess für das Programm durch und analysiert das XML-Dokument. Zusätzlich wird Beautiful Soup
auch verwendet, um den gegebenen Quellcode zu verschönern.
Für diese Methode muss die Bibliothek Beautiful Soup
manuell installiert und dann in den Python-Code importiert werden. Diese Bibliothek kann mit dem Befehl pip
installiert werden. Die neueste Version der Bibliothek Beautiful Soup 4
funktioniert auf Python 2.7 und höher.
Der folgende Code verwendet die Bibliothek Beautiful Soup
, um ein XML-Dokument in Python zu parsen.
from bs4 import BeautifulSoup
file1 = """<foo>
<bar>
<type foobar="Hello"/>
<type foobar="God"/>
</bar>
</foo>"""
a = BeautifulSoup(file1)
print(a.foo.bar.type["foobar"])
print(a.foo.bar.findAll("type"))
Ausgabe:
u'Hello'
[<type foobar="Hello"></type>, <type foobar="God"></type>]
Beautiful Soup
ist schneller als alle anderen Tools, die zum Parsen verwendet werden, aber es kann manchmal schwierig sein, diese Methode zu verstehen und zu implementieren.
Verwenden Sie die Bibliothek xmltodict
, um ein XML-Dokument in Python zu analysieren
Die Bibliothek xmltodict
hilft dabei, den Prozess auf XML-Dateien ähnlich dem von JSON zu gestalten. Es kann auch verwendet werden, wenn wir eine XML-Datei analysieren möchten. Das Modul xmltodict
kann in diesem Fall verwendet werden, indem eine XML-Datei in ein Ordered Dictionary
geparst wird.
Die Bibliothek xmltodict
muss manuell installiert und dann in den Python-Code importiert werden, der die XML-Datei enthält. Die Installation von xmltodict
ist ziemlich einfach und kann mit dem Standard-Befehl pip
durchgeführt werden.
Der folgende Code verwendet die Bibliothek xmltodict
, um ein XML-Dokument in Python zu parsen.
import xmltodict
file1 = """<foo>
<bar>
<type foobar="Hello"/>
<type foobar="God"/>
</bar>
</foo> """
result = xmltodict.parse(file1)
print(result)
Ausgabe:
OrderedDict([(u'foo', OrderedDict([(u'bar', OrderedDict([(u'type', [OrderedDict([(u'@foobar', u'Hello')]), OrderedDict([(u'@foobar', u'God')])])]))]))])
Verwenden Sie die Bibliothek lxml
, um ein XML-Dokument in Python zu analysieren
Die Bibliothek lxml
ist in der Lage, eine einfache, aber sehr mächtige API in Python bereitzustellen, die zum Parsen von XML- und HTML-Dateien verwendet wird. Es kombiniert die ElementTree
-API mit libxml2/libxslt
.
In einfacheren Worten, die lxml
-Bibliothek erweitert die alte ElementTree
-Bibliothek weiter, um Unterstützung für viel neuere Dinge wie XML-Schema, XPath und XSLT anzubieten.
Hier verwenden wir die Bibliothek lxml.objectify
. Der folgende Code verwendet die Bibliothek lxml
, um ein XML-Dokument in Python zu parsen.
from collections import defaultdict
from lxml import objectify
file1 = """<foo>
<bar>
<type foobar="1"/>
<type foobar="2"/>
</bar>
</foo>"""
c = defaultdict(int)
root = objectify.fromstring(file1)
for item in root.bar.type:
c[item.attrib.get("foobar")] += 1
print(dict(c))
Ausgabe:
{'1': 1, '2': 1}
Hier in diesem Programm wird die Variable c
verwendet, um die Anzahl jedes verfügbaren Elements in einem Dictionary zu speichern.
Verwenden Sie das Modul untangle
, um ein XML-Dokument in Python zu analysieren
Das Modul untangle
ist ein einfach zu implementierendes Modul, das sich auf die Umwandlung von XML in ein Python-Objekt konzentriert. Es kann auch einfach mit dem Befehl pip
installiert werden. Dieses Modul funktioniert mit Python 2.7 und höher.
Der folgende Code verwendet das Modul untangle
, um ein XML-Dokument in Python zu parsen.
XML-Datei (sample1.xml):
<foo>
<bar>
<type foobar="Hello"/>
</bar>
</foo>
Python-Code:
import untangle
x = untangle.parse("/path_to_xml_file/sample1.xml")
print(x.foo.bar.type["foobar"])
Ausgabe:
Hello
Verwenden Sie die Bibliothek declxml
, um ein XML-Dokument in Python zu analysieren
Die Bibliothek declxml
, eine Abkürzung für Declarative XML Processing, wird verwendet, um eine einfache API zum Serialisieren und Parsen von XML-Dokumenten bereitzustellen. Diese Bibliothek zielt darauf ab, die Arbeitsbelastung des Programmierers zu reduzieren und die Notwendigkeit zu ersetzen, große und lange Codestücke der Parsing-Logik zu durchlaufen, die bei der Verwendung anderer gängiger APIs wie minidom
oder ElementTree
erforderlich ist.
Das Modul declxml
kann einfach mit dem Befehl pip
oder pipenv
im System installiert werden. Der folgende Code verwendet die Bibliothek declxml
, um ein XML-Dokument in Python zu parsen.
import declxml as xml
xml_string = """
<foo>
<bar>
<type foobar="1"/>
<type foobar="3"/>
<type foobar="5"/>
</bar>
</foo>
"""
processor = xml.dictionary(
"foo", [xml.dictionary("bar", [xml.array(xml.integer("type", attribute="foobar"))])]
)
xml.parse_from_string(processor, xml_string)
Ausgabe:
{'bar': {'foobar': [1, 3, 5]}}
Bei dieser Methode verwenden wir Prozessoren zur deklarativen Charakterisierung der Struktur des gegebenen XML-Dokuments und zum Mapping zwischen XML- und Python-Datenstrukturen.
Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.
LinkedIn