Python-Datenpersistenz - XML-Parser
XML ist die Abkürzung für eXtensible Markup Language. Es ist eine tragbare Open Source- und plattformübergreifende Sprache, die HTML oder SGML sehr ähnlich ist und vom World Wide Web Consortium empfohlen wird.
Es ist ein bekanntes Datenaustauschformat, das von einer Vielzahl von Anwendungen wie Webdiensten, Office-Tools und verwendet wird Service Oriented Architectures(SOA). Das XML-Format ist sowohl maschinenlesbar als auch für Menschen lesbar.
Das XML-Paket der Standard-Python-Bibliothek besteht aus folgenden Modulen für die XML-Verarbeitung:
Sr.Nr. | Module & Beschreibung |
---|---|
1 | xml.etree.ElementTree die ElementTree API, ein einfacher und leichter XML-Prozessor |
2 | xml.dom die DOM-API-Definition |
3 | xml.dom.minidom eine minimale DOM-Implementierung |
4 | xml.sax Implementierung der SAX2-Schnittstelle |
5 | xml.parsers.expat die Expat-Parser-Bindung |
Die Daten im XML-Dokument sind in einem baumartigen hierarchischen Format angeordnet, beginnend mit root und Elementen. Jedes Element ist ein einzelner Knoten im Baum und verfügt über ein Attribut, das in den Tags <> und </> eingeschlossen ist. Jedem Element können ein oder mehrere Unterelemente zugewiesen werden.
Das Folgende ist ein typisches Beispiel für ein XML-Dokument:
<?xml version = "1.0" encoding = "iso-8859-1"?>
<studentlist>
<student>
<name>Ratna</name>
<subject>Physics</subject>
<marks>85</marks>
</student>
<student>
<name>Kiran</name>
<subject>Maths</subject>
<marks>100</marks>
</student>
<student>
<name>Mohit</name>
<subject>Biology</subject>
<marks>92</marks>
</student>
</studentlist>
Während dem Benutzen ElementTreeModul besteht der erste Schritt darin, das Stammelement des Baums einzurichten. Jedes Element hat ein Tag und ein Attribut, das ein Diktierobjekt ist. Für das Stammelement ist ein Attribut ein leeres Wörterbuch.
import xml.etree.ElementTree as xmlobj
root=xmlobj.Element('studentList')
Jetzt können wir ein oder mehrere Elemente unter dem Stammelement hinzufügen. Jedes Elementobjekt kann habenSubElements. Jedes Unterelement verfügt über ein Attribut und eine Texteigenschaft.
student=xmlobj.Element('student')
nm=xmlobj.SubElement(student, 'name')
nm.text='name'
subject=xmlobj.SubElement(student, 'subject')
nm.text='Ratna'
subject.text='Physics'
marks=xmlobj.SubElement(student, 'marks')
marks.text='85'
Dieses neue Element wird mit der Methode append () an das Stammverzeichnis angehängt.
root.append(student)
Fügen Sie mit der obigen Methode so viele Elemente wie gewünscht hinzu. Schließlich wird das Stammelementobjekt in eine Datei geschrieben.
tree = xmlobj.ElementTree(root)
file = open('studentlist.xml','wb')
tree.write(file)
file.close()
Jetzt sehen wir, wie die XML-Datei analysiert wird. Erstellen Sie dazu einen Dokumentbaum, der seinen Namen als Dateiparameter im ElementTree-Konstruktor angibt.
tree = xmlobj.ElementTree(file='studentlist.xml')
Das Baumobjekt hat getroot() Die Methode zum Abrufen des Stammelements und von getchildren () gibt eine Liste der darunter liegenden Elemente zurück.
root = tree.getroot()
children = root.getchildren()
Ein Wörterbuchobjekt, das jedem Unterelement entspricht, wird durch Iterieren über die Unterelementauflistung jedes untergeordneten Knotens konstruiert.
for child in children:
student={}
pairs = child.getchildren()
for pair in pairs:
product[pair.tag]=pair.text
Jedes Wörterbuch wird dann an eine Liste angehängt, die die ursprüngliche Liste der Wörterbuchobjekte zurückgibt.
SAXist eine Standardschnittstelle für ereignisgesteuertes XML-Parsing. Für das Parsen von XML mit SAX ist ContentHandler erforderlich, indem xml.sax.ContentHandler untergeordnet wird. Sie registrieren Rückrufe für Ereignisse von Interesse und lassen den Parser das Dokument durchgehen.
SAX ist nützlich, wenn Ihre Dokumente groß sind oder wenn Sie Speicherbeschränkungen haben, da die Datei beim Lesen von der Festplatte analysiert wird, sodass die gesamte Datei niemals im Speicher gespeichert wird.
Dokumentobjektmodell
(DOM) API ist eine Empfehlung des World Wide Web Consortium. In diesem Fall wird die gesamte Datei in den Speicher eingelesen und in einer hierarchischen (baumbasierten) Form gespeichert, um alle Funktionen eines XML-Dokuments darzustellen.
SAX, nicht so schnell wie DOM, mit großen Dateien. Andererseits kann DOM Ressourcen töten, wenn es für viele kleine Dateien verwendet wird. SAX ist schreibgeschützt, während DOM Änderungen an der XML-Datei zulässt.