Einen XML-Parser in Python erstellen

Vaibhhav Khetarpal 10 Oktober 2023
  1. Verwenden Sie die API ElementTree, um ein XML-Dokument in Python zu parsen
  2. Verwendung des Moduls minidom zum Parsen eines XML-Dokuments in Python
  3. Verwenden Sie die Bibliothek Beautiful Soup, um ein XML-Dokument in Python zu parsen
  4. Verwenden Sie die Bibliothek xmltodict, um ein XML-Dokument in Python zu analysieren
  5. Verwenden Sie die Bibliothek lxml, um ein XML-Dokument in Python zu analysieren
  6. Verwenden Sie das Modul untangle, um ein XML-Dokument in Python zu analysieren
  7. Verwenden Sie die Bibliothek declxml, um ein XML-Dokument in Python zu analysieren
Einen XML-Parser in Python erstellen

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 Khetarpal avatar Vaibhhav Khetarpal avatar

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

Verwandter Artikel - Python XML