Domanda

Al momento sto lavorando su un'applicazione per la lettura ePub, e ho letto attraverso un mazzo di file XML normali bene con System.Xml e XmlDocument:

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

Tuttavia, ora sto cercando di aprire i file XHTML che contengono il testo vero e proprio libro, e sono file XHTML. Ora io non so davvero la differenza tra i due, ma sto ottenendo il seguente errore con questo codice (nello stesso documento, utilizzando la stessa XmlDocument e variabili XmlNodeList)

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

"WebException è stata gestita: il server remoto ha restituito un errore: (503) server non disponibile"

E 'un documento locale, quindi non sto capendo perché sta dando questo errore? Qualsiasi aiuto sarebbe molto apprezzato. :)

Ho il codice sorgente completo qui se aiuta: http://drop.io/epubtest

(so che il metodo ePubConstructor.ParseDocument() è terribilmente disordinata, sto solo cercando di farlo funzionare in questo momento, prima ho diviso in classi)

È stato utile?

Soluzione

Prova il seguente codice non testato:

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

Altri suggerimenti

Provare a rimuovere il DOCTYPE dal file XHTML, probabilmente si dispone di collegamento a un DTD esterno.

Prova il seguente codice:

XmlDocument xmldoc = new XmlDocument ();

doc.XmlResolver = null; // questo ignora la DTD

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top