Contoh validator sederhana di Python3 menggunakan pustaka populer lxml
Instalasi lxml
pip install lxml
Jika Anda mendapatkan pesan kesalahan seperti "Tidak dapat menemukan fungsi xmlCheckVersion di perpustakaan libxml2. Apakah libxml2 diinstal?" , coba lakukan ini dulu:
# 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
Validator paling sederhana
Mari buat validator.py paling sederhana
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
lalu tulis dan jalankan main.py
from validator import validate
if validate("path/to/file.xml", "path/to/scheme.xsd"):
print('Valid! :)')
else:
print('Not valid! :(')
Sedikit OOP
Untuk memvalidasi lebih dari satu file, tidak perlu membuat objek XMLSchema setiap saat, oleh karena itu:
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
Sekarang kita dapat memvalidasi semua file di direktori sebagai berikut:
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! :(')
Untuk opsi selengkapnya, baca di sini: Validasi dengan lxml