[Duvida] Validar xml

161 views
Skip to first unread message

José Clavijo

unread,
Nov 13, 2012, 1:03:27 PM11/13/12
to python...@googlegroups.com
Boa tarde senhores,


Gostaria de tirar uma duvida com vocês, estou trabalhando com xml.
Existe alguma biblioteca padrão que valide xml pelo XDS ou DTD no python?

Olhei algumas bibliotecas mais não sei se são padrão do python.

lxml
pyxsd
minixsv
xsv

Obrigado.


José Clavijo

Linux - Junior Polegato

unread,
Nov 13, 2012, 1:46:30 PM11/13/12
to python...@googlegroups.com
Em 13-11-2012 16:03, Jos� Clavijo escreveu:
> Boa tarde senhores,
> Gostaria de tirar uma duvida com voc�s, estou trabalhando com xml.
> Existe alguma biblioteca padr�o que valide xml pelo XDS ou DTD no python?
> Olhei algumas bibliotecas mais n�o sei se s�o padr�o do python.
> lxml
> pyxsd
> minixsv
> xsv

Ol�,

Eu fa�o assim:

def validar(xml, arquivo_xsd):
....'''Fun��o que valida um XML usando lxml do Python via arquivo XSD'''
....# Carrega o esquema XML do arquivo XSD
....xsd = lxml.etree.XMLSchema(file = arquivo_xsd)
....# Converte o XML passado em XML do lxml
....xml = lxml.etree.fromstring(xml)
....# Verifica a validade do xml
....erros = []
....if not xsd(xml):
........# Caso tenha erros, cria uma lista de erros
........for erro in xsd.error_log:
............erros.append({
................'message'....: erro.message,
................'domain'.... : erro.domain,
................'type'.... : erro.type,
................'level'.... : erro.level,
................'line'.... : erro.line,
................'column'.... : erro.column,
................'filename' : erro.filename,
................'domain_name': erro.domain_name,
................'type_name' : erro.type_name,
................'level_name' : erro.level_name
............})
....# Retorna os erros, sendo uma lista vazia caso n�o haja erros
....return erros


--

[]'s

Junior Polegato

José Clavijo

unread,
Nov 13, 2012, 1:48:18 PM11/13/12
to python...@googlegroups.com
Junior, a lxml é uma biblioteca padrão do python?


Em 13 de novembro de 2012 16:46, Linux - Junior Polegato <li...@juniorpolegato.com.br> escreveu:
Em 13-11-2012 16:03, José Clavijo escreveu:

Boa tarde senhores,

Gostaria de tirar uma duvida com vocês, estou trabalhando com xml.
Existe alguma biblioteca padrão que valide xml pelo XDS ou DTD no python?
Olhei algumas bibliotecas mais não sei se são padrão do python.
lxml
pyxsd
minixsv
xsv

Olá,

        Eu faço assim:

def validar(xml, arquivo_xsd):
....'''Função que valida um XML usando lxml do Python via arquivo XSD'''

....# Carrega o esquema XML do arquivo XSD
....xsd = lxml.etree.XMLSchema(file = arquivo_xsd)
....# Converte o XML passado em XML do lxml
....xml = lxml.etree.fromstring(xml)
....# Verifica a validade do xml
....erros = []
....if not xsd(xml):
........# Caso tenha erros, cria uma lista de erros
........for erro in xsd.error_log:
............erros.append({
................'message'....: erro.message,
................'domain'.... : erro.domain,
................'type'....   : erro.type,
................'level'....  : erro.level,
................'line'....   : erro.line,
................'column'.... : erro.column,
................'filename'   : erro.filename,
................'domain_name': erro.domain_name,
................'type_name'  : erro.type_name,
................'level_name' : erro.level_name
............})
....# Retorna os erros, sendo uma lista vazia caso não haja erros
....return erros


--

[]'s

Junior Polegato

--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
   http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
   python-brasil+unsubscribe@googlegroups.com

Mauro Rodrigues

unread,
Nov 13, 2012, 1:51:25 PM11/13/12
to python...@googlegroups.com
Dá uma olhada aqui http://docs.python.org/2/library/markup.html
Particularmente eu uso etree

Mauro Sergio Martins Rodrigues
Graduando em Ciência da Computação - UNIFEI



2012/11/13 José Clavijo <clavij...@gmail.com>

Luciano Ramalho

unread,
Nov 13, 2012, 2:07:42 PM11/13/12
to python...@googlegroups.com
2012/11/13 José Clavijo <clavij...@gmail.com>:
> Junior, a lxml é uma biblioteca padrão do python?

Não, lxml não faz parte da biblioteca padrão do Python, mas é uma
biblioteca largamente utilizada (exceto no ambiente Windows onde nem
sempre é fácil compilar, pois é escrita em C).

A biblioteca padrão de Python é muito bem documentada, veja aqui os
pacotes relevantes:

http://docs.python.org/2.7/library/markup.html

Assim como o Mauro, eu também gosto da etree:

http://docs.python.org/2.7/library/xml.etree.elementtree.html

Bem mais fácil de usar que sax, dom etc. e tal.

[ ]s
Luciano
>> python-brasi...@googlegroups.com
>
>
> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com



--
Luciano Ramalho / OFICINAS TURING
Twitter: @ramalhoorg

Autor e professor dos cursos:

* Objetos Pythonicos --> http://turing.com.br/oopy
* Python para quem sabe Python --> http://turing.com.br/ppqsp

Luciano Ramalho

unread,
Nov 13, 2012, 2:08:49 PM11/13/12
to python...@googlegroups.com
Apenas completando, a lxml emula a API da etree, então estudando etree
vc aprende a usar a lxml também.

Mas a lxml tem mais recursos e é muito mais rápida.

[ ]s
Luciano

2012/11/13 Luciano Ramalho <luc...@ramalho.org>:

Mauro Rodrigues

unread,
Nov 13, 2012, 2:23:20 PM11/13/12
to python...@googlegroups.com
Luciano, a vantagem da lxml.etree é performance confere?

--
Mauro Sergio Martins Rodrigues




2012/11/13 Luciano Ramalho <luc...@ramalho.org>

José Clavijo

unread,
Nov 13, 2012, 2:27:18 PM11/13/12
to python...@googlegroups.com
Mais uma duvida como fazer para validar o DTD ou XSD pelo etree?

Luciano Ramalho

unread,
Nov 13, 2012, 2:51:55 PM11/13/12
to python...@googlegroups.com
2012/11/13 Mauro Rodrigues <maurus.r...@gmail.com>:
> Luciano, a vantagem da lxml.etree é performance confere?

Sim. E o lxml tem funções adicionais, que não existem no etree da
biblioteca padrão de Python. Veja a documentação da biblioteca.

[ ]s
Luciano

José Clavijo

unread,
Nov 13, 2012, 2:59:27 PM11/13/12
to python...@googlegroups.com
Reformulando a pergunta. Eu não consigo validar um xml pelas bibliotecas padrões do python? Teria que usar uma biblioteca adicional para usar o arquivo dtd ou xsd para validar o xml?

Luciano Ramalho

unread,
Nov 13, 2012, 4:00:07 PM11/13/12
to python...@googlegroups.com
2012/11/13 José Clavijo <clavij...@gmail.com>:
> Reformulando a pergunta. Eu não consigo validar um xml pelas bibliotecas
> padrões do python? Teria que usar uma biblioteca adicional para usar o
> arquivo dtd ou xsd para validar o xml?

Eu não encontrei receitas de como validar XML com DTD ou XSD usando
apenas a biblioteca ElementTree que é parte da biblioteca padrão de
Python.

Na verdade, eu sempre uso a lxml, porque no Linux não tem qualquer
dificuldade em para instalar (é um pacote pronto na maioria das
distros). A lxml tem suporte para validação contra DTD e XSD, conforme
os docs:

http://lxml.de/validation.html
Reply all
Reply to author
Forward
0 new messages