Ich habe eine XML-Datei und ein XML-Schema in einer anderen Datei und möchte überprüfen, ob meine XML-Datei dem Schema entspricht. Wie mache ich das in Python?
Ich würde etwas bevorzugen, das die Standardbibliothek verwendet, aber ich kann bei Bedarf ein Paket eines Drittanbieters installieren.
python
xml
validation
xsd
Eli Courtwright
quelle
quelle
Was "reine Python" -Lösungen betrifft: Der Paketindex listet auf:
quelle
Ein Beispiel für einen einfachen Validator in Python3 unter Verwendung der beliebten Bibliothek lxml
Installation lxml
Wenn Sie eine Fehlermeldung wie "Funktion xmlCheckVersion in Bibliothek libxml2 konnte nicht gefunden werden. Ist libxml2 installiert?" Versuchen Sie dies zuerst:
Der einfachste Validator
Lassen Sie uns die einfachste validator.py erstellen
Schreiben Sie dann main.py und führen Sie es aus
Ein bisschen OOP
Um mehr als eine Datei zu validieren, muss nicht jedes Mal ein XMLSchema- Objekt erstellt werden.
validator.py
Jetzt können wir alle Dateien im Verzeichnis wie folgt validieren:
main.py.
Weitere Optionen finden Sie hier: Validierung mit lxml
quelle
Das PyXB-Paket unter http://pyxb.sourceforge.net/ generiert Validierungsbindungen für Python aus XML- Schemadokumenten . Es verarbeitet fast jedes Schemakonstrukt und unterstützt mehrere Namespaces.
quelle
Es gibt zwei Möglichkeiten (tatsächlich gibt es mehr), wie Sie dies tun können.
1. mit lxml
pip install lxml
>> xmllint --format --pretty 1 --load-trace --debug --schema /path/to/my_schema_file.xsd /path/to/my_xml_file.xml
quelle
Mit dem Python-Paket xmlschema können Sie eine XML-Datei oder einen XML-Baum einfach anhand eines XML- Schemas (XSD) validieren . Es ist reines Python, verfügbar auf PyPi und hat nicht viele Abhängigkeiten.
Beispiel - Überprüfen Sie eine Datei:
Die Methode löst eine Ausnahme aus, wenn die Datei nicht anhand der XSD validiert wird. Diese Ausnahme enthält dann einige Details zu Verstößen.
Wenn Sie viele Dateien validieren möchten, müssen Sie die XSD nur einmal laden:
Wenn Sie die Ausnahme nicht benötigen, können Sie Folgendes überprüfen:
Alternativ funktioniert xmlschema direkt mit Dateiobjekten und in XML-Speicherbäumen (entweder mit xml.etree.ElementTree oder lxml erstellt). Beispiel:
quelle
lxml bietet etree.DTD
aus den Tests auf http://lxml.de/api/lxml.tests.test_dtd-pysrc.html
quelle