我目前仅限于使用 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,但不知道也找不到从字符串加载它的语法:
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 中做到这一点?