Ein Beispiel für einen einfachen Validator in Python3 unter Verwendung der beliebten Bibliothek lxml
Installation lxml
pip install lxml
Wenn Sie eine Fehlermeldung wie "Funktion xmlCheckVersion in Bibliothek libxml2 konnte nicht gefunden werden. Ist libxml2 installiert?" Versuchen Sie dies zuerst:
# Debian/Ubuntu
apt-get install python-dev python3-dev libxml2-dev libxslt-dev
# Fedora 23+
dnf install python-devel python3-devel libxml2-devel libxslt-devel
Der einfachste Validator
Lassen Sie uns die einfachste validator.py erstellen
from lxml import etree
def validate(xml_path: str, xsd_path: str) -> bool:
xmlschema_doc = etree.parse(xsd_path)
xmlschema = etree.XMLSchema(xmlschema_doc)
xml_doc = etree.parse(xml_path)
result = xmlschema.validate(xml_doc)
return result
Schreiben Sie dann main.py und führen Sie es aus
from validator import validate
if validate("path/to/file.xml", "path/to/scheme.xsd"):
print('Valid! :)')
else:
print('Not valid! :(')
Ein bisschen OOP
Um mehr als eine Datei zu validieren, muss nicht jedes Mal ein XMLSchema- Objekt erstellt werden.
validator.py
from lxml import etree
class Validator:
def __init__(self, xsd_path: str):
xmlschema_doc = etree.parse(xsd_path)
self.xmlschema = etree.XMLSchema(xmlschema_doc)
def validate(self, xml_path: str) -> bool:
xml_doc = etree.parse(xml_path)
result = self.xmlschema.validate(xml_doc)
return result
Jetzt können wir alle Dateien im Verzeichnis wie folgt validieren:
main.py.
import os
from validator import Validator
validator = Validator("path/to/scheme.xsd")
# The directory with XML files
XML_DIR = "path/to/directory"
for file_name in os.listdir(XML_DIR):
print('{}: '.format(file_name), end='')
file_path = '{}/{}'.format(XML_DIR, file_name)
if validator.validate(file_path):
print('Valid! :)')
else:
print('Not valid! :(')
Weitere Optionen finden Sie hier: Validierung mit lxml