2008-08-19 28 views

Trả lời

29

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 
7

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 
+0

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

Các vấn đề liên quan