31 Stimmen

Wie kann ich xml gegen eine DTD-Datei in Python validieren

Ich muss eine XML-Zeichenkette (und nicht eine Datei) validieren gegen eine DTD-Beschreibungsdatei validieren.

Wie kann das geschehen in python ?

33voto

Michael Twomey Punkte 1682

Eine weitere gute Option ist lxmls Validierung die ich als sehr angenehm empfinde.

Ein einfaches Beispiel von der lxml-Website:

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

7voto

Aus dem Verzeichnis examples in den libxml2-Python-Bindungen:

#!/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

0 Stimmen

Beachten Sie, dass die libxml2-Bindungen nicht Teil der Python-Standardbibliothek sind, d.h. nicht eingebaut sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X