Как контролировать чтение DTD с помощью .NET?

Наша программа на C# читает файл XML. XML-файл имеет заголовок standalone='no'.

Раньше DOCTYPE выглядел так:

<!DOCTYPE foo SYSTEM "silly.dtd">

где silly.dtd не сидит рядом с файлом.

По разным причинам я изменил это на

<!DOCTYPE foo PUBLIC "-//Some Public Id" "urn:outerspace:silly.dtd">

Я не ожидал, что ничего изменится, так как раньше DTD нельзя было открыть как './silly.dtd', а сейчас его нельзя открыть по 'urn:outerspace:silly.dtd'. Единственная разница заключалась в том, что распознаватель каталогов не должен был беспокоиться об абсолютизации идентификатора системы.

Представьте мое удивление, когда я получил исключение из среды выполнения .NET, по-видимому, пытающееся открыть DTD по адресу urn:.

Может ли какой-нибудь добрый человек направить меня к рецепту, чтобы сказать .NET просто тихо сдаться в этом случае? Я знаю, как это сделать на Java, но в .NET я немного теряюсь.


person bmargulies    schedule 09.12.2009    source источник


Ответы (2)


Реализуйте свой собственный XmlResolver, чтобы справиться с этим (вы можете просто наследуйте от XmlUrlResolver), затем подключите его к XmlTextReader и передать средство чтения в XmlDocument.

person Mauricio Scheffer    schedule 10.12.2009

Читатель не будет пытаться получить доступ к dtd, если у вас есть следующие свойства: .ProhibitDtd=false; .XmlResolver=нуль;

person bill seacham    schedule 10.12.2009
comment
Это не то, что случилось со мной. Когда я установил для распознавателя значение null в параметрах чтения, он пошел и создал распознаватель по умолчанию. - person bmargulies; 10.12.2009