J'ai un fichier XML et un schéma XML dans un autre fichier et je souhaite valider que mon fichier XML adhère au schéma. Comment faire cela en Python?
Je préférerais quelque chose utilisant la bibliothèque standard, mais je peux installer un package tiers si nécessaire.
python
xml
validation
xsd
Eli Courtwright
la source
la source
Quant aux solutions "python pur": l'index du package répertorie:
la source
Un exemple de validateur simple en Python3 utilisant la bibliothèque populaire lxml
Installation lxml
Si vous obtenez une erreur du type "Impossible de trouver la fonction xmlCheckVersion dans la bibliothèque libxml2. Est-ce que libxml2 est installé?" , essayez de faire ceci en premier:
Le validateur le plus simple
Créons le validator.py le plus simple
puis écrivez et exécutez main.py
Un peu de POO
Afin de valider plus d'un fichier, il n'est pas nécessaire de créer un objet XMLSchema à chaque fois, par conséquent:
validator.py
Nous pouvons maintenant valider tous les fichiers du répertoire comme suit:
main.py
Pour plus d'options, lisez ici: Validation avec lxml
la source
Le package PyXB à l'adresse http://pyxb.sourceforge.net/ génère des liaisons de validation pour Python à partir de documents de schéma XML. Il gère presque toutes les constructions de schéma et prend en charge plusieurs espaces de noms.
la source
Il y a deux façons (en fait il y en a plus) que vous pouvez faire cela.
1. en utilisant lxml
pip install lxml
>> xmllint --format --pretty 1 --load-trace --debug --schema /path/to/my_schema_file.xsd /path/to/my_xml_file.xml
la source
Vous pouvez facilement valider un fichier XML ou une arborescence par rapport à un schéma XML (XSD) avec le package xmlschema Python . C'est du pur Python, disponible sur PyPi et n'a pas beaucoup de dépendances.
Exemple - valider un fichier:
La méthode lève une exception si le fichier n'est pas validé par rapport au XSD. Cette exception contient ensuite quelques détails de violation.
Si vous souhaitez valider de nombreux fichiers, vous ne devez charger le XSD qu'une seule fois:
Si vous n'avez pas besoin de l'exception, vous pouvez valider comme ceci:
Alternativement, xmlschema fonctionne directement sur les objets fichier et dans les arborescences XML en mémoire (créées avec xml.etree.ElementTree ou lxml). Exemple:
la source
lxml fournit etree.DTD
à partir des tests sur http://lxml.de/api/lxml.tests.test_dtd-pysrc.html
la source