我目前仅限使用libxml2(而不是lxml)在QNX 6.5上进行解析。我想使用从字符串而不是从文件加载的DTD来验证我的xml。
lxml可让您执行以下操作:
import lxml
from lxml import etree
from StringIO import StringIO
dtd_string = """
<!ELEMENT page (title)>
<!ELEMENT title (#PCDATA)>
"""
xml = """
<page>
<title>Hello</title>
</page>
"""
dtd = etree.DTD(StringIO(dtd_string))
root = etree.fromstring(xml)
is_valid = dtd.validate(root)
我想使用libxml2做同样的事情。我可以从文件中加载DTD,但不知道也找不到从字符串中加载DTD的语法:
import libxml2
dtd = libxml2.parseDTD(None, dtd_file) #How to parse DTD from a string??
ctxt = libxml2.newValidCtxt()
doc = libxml2.parseDoc(xml)
is_valid = doc.validateDtd(ctxt, dtd)
#cleanup omitted
有人碰巧知道如何在libxml2中做到这一点吗?
答案 0 :(得分:0)
恩,我崩溃了,只是将xml读取到一个字符串中,并将dtd附加到了它。
我仍然欢迎任何更好的解决方案。
import libxml2
doc = None
dtd = None
ctxt = None
try:
xml = MY_DTD + filehandle.read().replace('\n', '')
ctxt = libxml2.newValidCtxt()
doc = libxml2.parseDoc(xml)
if not doc.validateDocument(ctxt):
return
root = doc.children
...