【发布时间】:2010-10-06 10:43:07
【问题描述】:
我正试图让阅读器从损坏的 XML 中恢复。将 libxml2.XML_PARSE_RECOVER 选项与 DOM api (libxml2.readDoc) 一起使用,它可以从实体问题中恢复。
但是,将选项与阅读器 API 一起使用(由于我们正在解析的文档的大小,这是必不可少的)不起作用。它只是陷入了一个永久循环(reader.Read() 返回-1):
示例代码(附小例子):
import cStringIO
import libxml2
DOC = "<a>some broken & xml</a>"
reader = libxml2.readerForDoc(DOC, "urn:bogus", None, libxml2.XML_PARSE_RECOVER | libxml2.XML_PARSE_NOERROR)
ret = reader.Read()
while ret:
print 'ret: %d' % ret
print "node name: ", reader.Name(), reader.NodeType()
ret = reader.Read()
任何想法如何正确恢复?
【问题讨论】:
-
是的:
while ret == 1:。见xmlsoft.org/xmlreader.html。 -
谢谢,但这不会恢复,只是中止。因此,对于上述内容,我只会得到 标记。DOM api 会生成一个文档树,而恢复只是删除 & - 这是我想要的阅读器 API 的理想(等效)。