Eu tenho um arquivo XML e um esquema XML em outro arquivo e gostaria de validar se meu arquivo XML está de acordo com o esquema. Como faço isso em Python?
Eu prefiro algo usando a biblioteca padrão, mas posso instalar um pacote de terceiros, se necessário.
python
xml
validation
xsd
Eli Courtwright
fonte
fonte
Quanto às soluções "puramente python": o índice do pacote lista:
fonte
Um exemplo de validador simples em Python3 usando a popular biblioteca lxml
Instalação lxml
Se você receber um erro como "Não foi possível encontrar a função xmlCheckVersion na biblioteca libxml2. O libxml2 está instalado?" , tente fazer isso primeiro:
O validador mais simples
Vamos criar o validator.py mais simples
em seguida, escreva e execute main.py
Um pouco de OOP
Para validar mais de um arquivo, não há necessidade de criar um XMLSchema objeto todas as vezes, portanto:
validator.py
Agora podemos validar todos os arquivos no diretório da seguinte maneira:
main.py
Para mais opções, leia aqui: Validação com lxml
fonte
O pacote PyXB em http://pyxb.sourceforge.net/ gera ligações de validação para Python a partir de documentos de esquema XML. Ele lida com quase todas as construções de esquema e oferece suporte a vários namespaces.
fonte
Existem duas maneiras (na verdade, existem mais) de fazer isso.
1. usando lxml
pip install lxml
>> xmllint --format --pretty 1 --load-trace --debug --schema /path/to/my_schema_file.xsd /path/to/my_xml_file.xml
fonte
Você pode validar facilmente um arquivo ou árvore XML em um Esquema XML (XSD) com o pacote xmlschema Python . É Python puro, disponível no PyPi e não tem muitas dependências.
Exemplo - validar um arquivo:
O método gera uma exceção se o arquivo não for validado no XSD. Essa exceção contém alguns detalhes de violação.
Se quiser validar muitos arquivos, você só precisa carregar o XSD uma vez:
Se você não precisa da exceção, pode validar desta forma:
Como alternativa, xmlschema funciona diretamente em objetos de arquivo e em árvores XML de memória (criadas com xml.etree.ElementTree ou lxml). Exemplo:
fonte
lxml fornece etree.DTD
dos testes em http://lxml.de/api/lxml.tests.test_dtd-pysrc.html
fonte