Произошла ошибка при открытии внешнего DTD (w3.org, xhtml1-transitional.dtd). 503 Сервер недоступен
Я пытаюсь делать запросы xpath к документу xhtml. Использование .NET 3.5.
Документ выглядит так:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
....
</head>
<body>
...
</body>
</html>
Поскольку документ включает в себя различные сущности символов (
и так далее), мне нужно использовать DTD, чтобы загрузить его сXmlReader, Итак, мой код выглядит так:
var s = File.OpenRead(fileToRead)
var reader = XmlReader.Create(s, new XmlReaderSettings{ ProhibitDtd=false });
Но когда я запускаю это, он возвращает
Произошла ошибка при открытии внешнего DTD 'http://www.w3.org/TR/xhtml1-transitional.dtd': Удаленный сервер возвратил ошибку: (503) сервер недоступен.
Теперь я знаюЗачем Я получаю ошибку 503.W3C объяснил это очень четко.
Я видел «обходные пути», когда люди просто отключали DTD. Это то, чтоProhibitDtd=true
можно сделать, и это устраняет ошибку 503.
Но в моем случае это приводит к другим проблемам - приложение не получает определения сущности и, следовательно, не является правильно сформированным XML. Как я могу проверить с помощью DTD и получить определения сущностей, не заходя на сайт w3.org?
Я думаю, что .NET 4.0 имеет отличную встроенную возможность справиться с этой ситуацией:XmlPreloadedResolver, Но мне нужно решение для .NET 3.5.
связанные с:
- java.io.IOException: сервер вернул код ответа HTTP: 503