我正在嘗試編寫一個驗證腳本,用於驗證NITF DTD中的XML,http://www.iptc.org/std/NITF/3.4/specification/dtd/nitf-3-4.dtd。基於this post我想出了以下簡單的腳本來驗證NITF XML文檔。 Bellow是腳本運行時得到的錯誤消息,這不是很具描述性,而且很難調試。任何幫助表示讚賞。使用lxml解析DTD時出錯
#!/usr/bin/env python
def main():
from lxml import etree, objectify
from StringIO import StringIO
f = open('nitf_test.xml')
xml_doc = f.read()
f.close()
f = open('nitf-3-4.dtd')
dtd_doc = f.read()
f.close()
dtd = etree.DTD(StringIO(dtd_doc))
tree = objectify.parse(StringIO(xml_doc))
dtd.validate(tree)
if __name__ == '__main__':
main()
回溯錯誤消息:
Traceback (most recent call last):
File "./test_nitf_doc.py", line 23, in <module>
main()
File "./test_nitf_doc.py", line 16, in main
dtd = etree.DTD(StringIO(dtd_doc))
File "dtd.pxi", line 43, in lxml.etree.DTD.__init__ (src/lxml/lxml.etree.c:126056)
File "dtd.pxi", line 117, in lxml.etree._parseDtdFromFilelike (src/lxml/lxml.etree.c:126727)
lxml.etree.DTDParseError: error parsing DTD
如果我改變行:
dtd = etree.DTD(StringIO(dtd_doc))
要:
dtd = etree.DTD(dtd_doc)
我得到的錯誤是:
lxml.etree.DTDParseError: failed to load external entity "NULL"
請發表您試圖將XML驗證。 – 2011-03-31 01:33:11
這個'加載外部實體失敗'的錯誤信息是相當具有誤導性的。這實際上是因爲你將一個字符串傳遞給了DTD的構造函數而不是文件對象,但是這個錯誤信息根本無助於理解這一點。 – fviktor 2011-07-13 19:24:12