使用libxml2为python从文本加载DTD

问题描述 投票:0回答:1

我目前仅限于使用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中这样做?

python libxml2 dtd-parsing
1个回答
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

    ...
© www.soinside.com 2019 - 2024. All rights reserved.