Почему я получаю веб-исключение при создании XPathDocument?

Создание XPathDocument со ссылочным DTD иногда вызывает веб-исключение. Зачем?

3 ответа

Решение

См. http://todotnet.com/archive/2006/07/27/8248.aspx

Потому что в конструкции XPathDocument есть команда http GET, чтобы посмотреть, сможет ли она получить доступ к DTD. Он ничего не делает с DTD. Это на всякий случай. Таким образом, хотя XPathDocument изначально настроен как более быстрая альтернатива XmlDocument, у вас будут дополнительные накладные расходы на http-запрос, который необходимо решить. Представьте, что этот сервер находится на другой стороне земного шара!

Вы можете написать собственный XmlUrlResolver и затем игнорировать удаленный DTD. Кроме того, я полагаю, вы можете установить use XmlResolver = null в XmlTextReader.

Для тех, кто заинтересован, я нашел обходной путь для отключения проверки dtd

XmlReaderSettings settings = new XmlReaderSettings();
 settings.XmlResolver = null;
 settings.ProhibitDtd = false;

 var xmlReader = XmlTextReader.Create(new StringReader(xmlString),settings);
 XPathDocument xpathDoc = new XPathDocument(xmlReader);
Другие вопросы по тегам