Mam plik XML i schemat XML w innym pliku i chciałbym sprawdzić, czy mój plik XML jest zgodny ze schematem. Jak to zrobić w Pythonie?
Wolałbym coś przy użyciu biblioteki standardowej, ale w razie potrzeby mogę zainstalować pakiet innej firmy.
python
xml
validation
xsd
Eli Courtwright
źródło
źródło
Jeśli chodzi o rozwiązania „czystego Pythona”: indeks pakietów zawiera:
źródło
Przykład prostego walidatora w Pythonie3 wykorzystującego popularną bibliotekę lxml
Instalacja lxml
Jeśli pojawi się błąd typu „Nie można znaleźć funkcji xmlCheckVersion w bibliotece libxml2. Czy zainstalowano bibliotekę libxml2?” , spróbuj najpierw to zrobić:
Najprostszy walidator
Stwórzmy najprostszy validator.py
następnie napisz i uruchom main.py
Trochę OOP
Aby zweryfikować więcej niż jeden plik, nie ma potrzeby tworzenia za każdym razem obiektu XMLSchema , dlatego:
validator.py
Teraz możemy zweryfikować wszystkie pliki w katalogu w następujący sposób:
main.py
Więcej opcji znajdziesz tutaj: Walidacja za pomocą lxml
źródło
Pakiet PyXB pod adresem http://pyxb.sourceforge.net/ generuje weryfikację powiązań dla Pythona z dokumentów schematu XML. Obsługuje prawie każdą konstrukcję schematu i obsługuje wiele przestrzeni nazw.
źródło
Można to zrobić na dwa sposoby (a właściwie jest ich więcej).
1. używając lxml
pip install lxml
>> xmllint --format --pretty 1 --load-trace --debug --schema /path/to/my_schema_file.xsd /path/to/my_xml_file.xml
źródło
Możesz łatwo sprawdzić poprawność pliku XML lub drzewa w oparciu o schemat XML (XSD) za pomocą pakietu xmlschema Python . To czysty Python, dostępny na PyPi i nie ma wielu zależności.
Przykład - sprawdź poprawność pliku:
Metoda zgłasza wyjątek, jeśli plik nie jest sprawdzany pod kątem XSD. Ten wyjątek zawiera następnie szczegóły dotyczące naruszenia.
Jeśli chcesz zweryfikować wiele plików, wystarczy załadować plik XSD tylko raz:
Jeśli nie potrzebujesz wyjątku, możesz zweryfikować w ten sposób:
Alternatywnie xmlschema działa bezpośrednio na obiektach plików i drzewach XML pamięci (utworzonych za pomocą xml.etree.ElementTree lub lxml). Przykład:
źródło
lxml udostępnia etree.DTD
z testów na http://lxml.de/api/lxml.tests.test_dtd-pysrc.html
źródło