503 (сервер недоступен) WebException при загрузке локального файла XHTML - PullRequest
1 голос
/ 22 мая 2010

Итак, я сейчас работаю над приложением для чтения ePub, и я прекрасно читал кучу обычных файлов XML с помощью System.Xml и XmlDocument:

XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(Path.Combine(Directory.GetCurrentDirectory(), "META-INF/container.xml"));
XmlNodeList xnl = xmldoc.GetElementsByTagName("rootfile");

Однако сейчас я пытаюсь открыть файлы XHTML, которые содержат фактический текст книги, и они являются файлами XHTML. Теперь я на самом деле не знаю разницу между ними, но я получаю следующую ошибку с этим кодом (в том же документе, используя те же переменные XmlDocument и XmlNodeList)

xmldoc.Load(Path.Combine(Directory.GetCurrentDirectory(), "OEBPS/part1.xhtml"));

"Исключение WebException не обработано: удаленный сервер возвратил ошибку: (503) Сервер недоступен"

Это локальный документ, поэтому я не понимаю, почему он выдает эту ошибку? Любая помощь будет принята с благодарностью. :)

У меня есть полный исходный код, если он поможет: http://drop.io/epubtest

(я знаю, что метод ePubConstructor.ParseDocument() ужасно грязный, я просто пытаюсь заставить его работать в данный момент, прежде чем разделить его на классы)

Ответы [ 3 ]

2 голосов
/ 22 мая 2010

Попробуйте удалить DOCTYPE из файла XHTML, возможно, у вас есть ссылка на внешний DTD.

0 голосов
/ 04 июня 2010

Попробуйте следующий код:

XmlDocument xmldoc = new XmlDocument ();

doc.XmlResolver = null; // это игнорирует DTD

xmldoc.Load (Path.Combine (Directory.GetCurrentDirectory (), "META-INF / container.xml"));

XmlNodeList xnl = xmldoc.GetElementsByTagName ("rootfile");

0 голосов
/ 22 мая 2010

Попробуйте следующий непроверенный код:

XmlDocument xmldoc = new XmlDocument(); 
XmlReaderSettings settings = new XmlReaderSettings
{
    XmlResolver = new XmlUrlResolver()
};
using (var reader = XmlReader.Create(
    Path.Combine(Directory.GetCurrentDirectory(), 
                 "OEBPS/part1.xhtml"), settings))
{
    xmlDoc.Load(reader);
}
...