Я понимаю, что это действительно старый вопрос, но для всех, кто борется с этой проблемой, вот что я сделал.
Я перестал пытаться проверять DTD.
Вместо этого я использовал onix 2.1 xsd, доступный по http://www.editeur.org/15/Previous-Releases/#R%202.1%20Downloads. Мне пришлось установить пространство имен по умолчанию:
var nt = new NameTable();
var ns = new XmlNamespaceManager(nt);
ns.AddNamespace(string.Empty, "http://www.editeur.org/onix/2.1/reference");
var context = new XmlParserContext(null, ns, null, XmlSpace.None);
и затем при загрузке xml отключите разбор DTD (это использует .NET4)
var settings = XmlReaderSettings
{
ValidationType = System.Xml.ValidationType.Schema,
DtdProcessing = DtdProcessing.Ignore
}
using(var reader = XmlReader.Create("path to xml file", settings)) { ... }