86 votes

Validation avec un schéma XML en Python

Bounty : C'est une question vieille de 2 ans. Existe-t-il un validateur XSD pour Python maintenant ?

J'ai un fichier XML et un schéma XML dans un autre fichier et je voudrais valider que mon fichier XML adhère au schéma. Comment faire cela en Python?

Je préférerais utiliser la bibliothèque standard, mais je peux installer un paquet tiers si nécessaire.

52voto

Je suppose que vous voulez dire en utilisant des fichiers XSD. Étonnamment, peu de bibliothèques XML python prennent en charge cette fonctionnalité. Lxml fait cependant. Vérifier la validation avec lxml . La page explique également comment utiliser lxml pour valider avec d'autres types de schéma.

24voto

Steven Points 10243

Comme pour les "pure python" solutions: le package index des listes:

  • pyxsd, la description indique qu'il utilise le langage xml.programme etree.cElementTree, ce qui n'est pas "pur python" (mais inclus dans stdlib), mais le code source indique qu'il revient à xml.programme etree.ElementTree, donc ce serait de la pure python. Ne l'ai pas utilisé, mais d'après les docs, il fait de la validation du schéma.
  • minixsv: "un léger validation de schéma XML écrit en Python "pure"'. Toutefois, la description dit "à l'heure actuelle un sous-ensemble du schéma XML standard est pris en charge", de sorte que cela peut ne pas être suffisant.
  • XSV, qui, je pense, est utilisé pour le W3C en ligne xsd validateur (il semble toujours utiliser l'ancien pyxml paquet, ce qui je pense n'est plus maintenu)

13voto

pabigot Points 356

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 chaque construction de schéma et prend en charge plusieurs espaces de noms.

7voto

hinoglu Points 825

lxml fournit etree.DTD

à partir des tests sur http://lxml.de/api/lxml.tests.test_dtd-pysrc.html

 ...
root = etree.XML(_bytes("<b/>")) 
dtd = etree.DTD(BytesIO("<!ELEMENT b EMPTY>")) 
self.assert_(dtd.validate(root)) 
 

3voto

fulmicoton Points 5389

Si vous travaillez avec dtd, vous apprécierez peut-être cette recette

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: