dtd = etree.DTD(StringIO('<!ELEMENT foo EMPTY>'))
root = etree.XML('<foo/>')
print(dtd.validate(root))
root = etree.XML('<foo>bar</foo>')
print(dtd.validate(root))
print(dtd.error_log.filter_from_errors())
Как проверить xml на соответствие файлу DTD в Python