1

所以我目前正在开发一个 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()方法非常混乱,我只是想在我把它分成类之前让它工作)

4

3 回答 3

2

尝试从 XHTML 文件中删除 DOCTYPE,可能您有指向外部 DTD 的链接。

于 2010-05-22T01:54:35.463 回答
0

尝试以下未经测试的代码:

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);
}
于 2010-05-22T02:02:44.980 回答
0

试试下面的代码:

XmlDocument xmldoc = new XmlDocument();

doc.XmlResolver = null; // 这会忽略 DTD

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

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

于 2010-06-04T12:47:52.630 回答