Πώς μπορώ να επαληθεύσω xml έναντι ενός αρχείου DTD σε Python

ψήφοι
29

Θα πρέπει να επικυρώσει μια συμβολοσειρά XML (και όχι ένα αρχείο) ενάντια σε ένα αρχείο περιγραφής DTD.

Πώς μπορεί να γίνει αυτό στην python;

Δημοσιεύθηκε 19/08/2008 στις 07:24
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
29

Μια άλλη καλή επιλογή είναι η επικύρωση lxml το οποίο βρίσκω αρκετά ευχάριστο στη χρήση.

Ένα απλό παράδειγμα λαμβάνεται από την τοποθεσία 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
Απαντήθηκε 19/08/2008 στις 10:39
πηγή χρήστη

ψήφοι
7

από τον κατάλογο παραδειγμάτων στις δέστρες 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
Απαντήθηκε 06/11/2008 στις 23:17
πηγή χρήστη

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