Como faço para validar xml contra um arquivo DTD em Python

votos
29

Eu preciso para validar uma string XML (e não um arquivo) contra um arquivo de descrição de DTD.

Como isso pode ser feito em python?

Publicado 19/08/2008 em 07:24
fonte usuário
Em outras línguas...                            


2 respostas

votos
29

Outra boa opção é a validação do lxml que eu acho bastante agradável de usar.

Um exemplo simples retirados do local lxml:

from StringIO import StringIO

from lxml import etree

dtd = etree.DTD(StringIO("""<!ELEMENT foo EMPTY>"""))
root = etree.XML("<foo/>")
print(dtd.validate(root))
# True

root = etree.XML("<foo>bar</foo>")
print(dtd.validate(root))
# False
print(dtd.error_log.filter_from_errors())
# <string>:1:0:ERROR:VALID:DTD_NOT_EMPTY: Element foo was declared EMPTY this one has content
Respondeu 19/08/2008 em 10:39
fonte usuário

votos
7

do diretório de exemplos nas ligações libxml2 Python:

#!/usr/bin/python -u
import libxml2
import sys

# Memory debug specific
libxml2.debugMemory(1)

dtd="""<!ELEMENT foo EMPTY>"""
instance="""<?xml version="1.0"?>
<foo></foo>"""

dtd = libxml2.parseDTD(None, 'test.dtd')
ctxt = libxml2.newValidCtxt()
doc = libxml2.parseDoc(instance)
ret = doc.validateDtd(ctxt, dtd)
if ret != 1:
    print "error doing DTD validation"
    sys.exit(1)

doc.freeDoc()
dtd.freeDtd()
del dtd
del ctxt
Respondeu 06/11/2008 em 23:17
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more