Python에서 DTD 파일에 대해 xml의 유효성을 검사하는 방법
-
08-06-2019 - |
문제
DTD 설명 파일에 대해 XML 문자열 (파일이 아님)을 유효성을 유지해야합니다.
어떻게 그럴 수 있습니까? 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
다른 팁
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
제휴하지 않습니다 StackOverflow