Saya memiliki file XML dan skema XML di file lain dan saya ingin memvalidasi bahwa file XML saya mematuhi skema. Bagaimana saya melakukan ini dengan Python?
Saya lebih suka sesuatu yang menggunakan pustaka standar, tetapi saya dapat menginstal paket pihak ketiga jika perlu.
python
xml
validation
xsd
Eli Courtwright
sumber
sumber
Adapun solusi "python murni": daftar indeks paket:
sumber
Contoh validator sederhana di Python3 menggunakan pustaka populer lxml
Instalasi lxml
Jika Anda mendapatkan pesan kesalahan seperti "Tidak dapat menemukan fungsi xmlCheckVersion di perpustakaan libxml2. Apakah libxml2 diinstal?" , coba lakukan ini dulu:
Validator paling sederhana
Mari buat validator.py paling sederhana
lalu tulis dan jalankan main.py
Sedikit OOP
Untuk memvalidasi lebih dari satu file, tidak perlu membuat objek XMLSchema setiap saat, oleh karena itu:
validator.py
Sekarang kita dapat memvalidasi semua file di direktori sebagai berikut:
main.py
Untuk opsi selengkapnya, baca di sini: Validasi dengan lxml
sumber
Paket PyXB di http://pyxb.sourceforge.net/ menghasilkan pengikatan validasi untuk Python dari dokumen skema XML. Ini menangani hampir setiap konstruksi skema dan mendukung banyak ruang nama.
sumber
Ada dua cara (sebenarnya ada lebih banyak) yang bisa Anda lakukan ini.
1. menggunakan lxml
pip install lxml
>> xmllint --format --pretty 1 --load-trace --debug --schema /path/to/my_schema_file.xsd /path/to/my_xml_file.xml
sumber
Anda dapat dengan mudah memvalidasi file atau pohon XML terhadap XML Schema (XSD) dengan paket xmlschema Python . Ini murni Python, tersedia di PyPi dan tidak memiliki banyak dependensi.
Contoh - memvalidasi file:
Metode ini memunculkan pengecualian jika file tidak divalidasi terhadap XSD. Pengecualian itu kemudian berisi beberapa detail pelanggaran.
Jika Anda ingin memvalidasi banyak file, Anda hanya perlu memuat XSD sekali:
Jika Anda tidak memerlukan pengecualian, Anda dapat memvalidasi seperti ini:
Atau, xmlschema langsung bekerja pada objek file dan pohon XML memori (baik dibuat dengan xml.etree.ElementTree atau lxml). Contoh:
sumber
lxml menyediakan etree.DTD
dari pengujian di http://lxml.de/api/lxml.tests.test_dtd-pysrc.html
sumber