كيف يمكنني التحقق من صحة XML مقابل ملف DTD في Python

StackOverflow https://stackoverflow.com/questions/15798

  •  08-06-2019
  •  | 
  •  

سؤال

أحتاج إلى التحقق من صحة سلسلة XML (وليس ملفًا) مقابل ملف وصف DTD.

كيف يمكن أن يتم ذلك في python?

هل كانت مفيدة؟

المحلول

خيار جيد آخر هو التحقق من صحة 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

نصائح أخرى

من دليل الأمثلة في روابط python libxml2:

#!/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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top