Рад слышать, что это работает для вас!

аюсь написать сценарий проверки, который будет проверять XML в соответствии с DTD NITF,http://www.iptc.org/std/NITF/3.4/specification/dtd/nitf-3-4.dtd, На основеэта почта Я придумал следующий простой скрипт для проверки XML-документа NITF. Ниже приведено сообщение об ошибке, которое я получаю при запуске скрипта, которое не очень наглядно и затрудняет отладку. Любая помощь приветствуется.

#!/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"

Ответы на вопрос(1)

Ваш ответ на вопрос