Я пытаюсь выполнить запросы 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>
Поскольку документ содержит различные объекты char (
и т.д.), мне нужно использовать 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