Почему я получаю веб-исключение при создании 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);