Tôi cần xác thực chuỗi XML (chứ không phải tệp) đối với tệp mô tả DTD.Làm cách nào để xác thực xml dựa vào tệp DTD trong Python
Làm thế nào có thể được thực hiện trong python
?
Tôi cần xác thực chuỗi XML (chứ không phải tệp) đối với tệp mô tả DTD.Làm cách nào để xác thực xml dựa vào tệp DTD trong Python
Làm thế nào có thể được thực hiện trong python
?
Một lựa chọn tốt khác là lxml's validation mà tôi thấy khá dễ chịu khi sử dụng.
Một ví dụ đơn giản lấy từ trang web 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
từ thư mục ví dụ trong các ràng buộc 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
Lưu ý rằng các ràng buộc libxml2 không nằm trong các thư viện chuẩn của Python, tức là không được tích hợp sẵn. – ChuckB