2010-05-22 51 views
1

所以我目前正在研究ePub閱讀器應用程序,並且我一直在用System.Xml和XmlDocument閱讀大量常規XML文件:503(服務器不可用)加載本地XHTML文件時出現WebException

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()方法是可怕的凌亂,我只是想獲得它是做什麼工作我分裂之前它分爲類)

回答

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); 
} 
+0

謝謝!我還從代碼中發現了另一個建議,我可以只做'xmldoc.XmlResolver = null;'並且這也可以。我不確定是否有人比其他人更可取,但你的代碼非常有幫助! (加上你給我的使用(var ...)的技巧,這將幫助我清理我的代碼很多) – kcoppock 2010-05-22 02:08:21

2

嘗試從XHTML文件中刪除DOCTYPE,可能您已鏈接到外部DTD。

+0

感謝您的迴應!這是行得通的,但是程序的目的是獲取這些現有文件並將其讀入,因此我無法從每個文件中手動刪除DOCTYPE行。有沒有辦法讓我把它拉進去,而忽略那個標籤? – kcoppock 2010-05-22 01:58:00

0

嘗試以下代碼:

的XmlDocument xmlDoc中=新的XmlDocument();

doc.XmlResolver = null; //這忽略了DTD

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

XmlNodeList xnl = xmldoc.GetElementsByTagName(「rootfile」);

相關問題