2010-05-22 1 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) 서버를 사용할 수 없음 "

로컬 문서이므로이 오류가 발생하는 이유를 알 수 없습니다. 어떤 도움이라도 대단히 감사하겠습니다. :)

는 도움이된다면 내가 여기에 전체 소스 코드를 가지고

: I 분할 전에 가 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

2

XHTML 파일에서 DOCTYPE을 제거하려고하면 아마도 외부 DTD에 대한 링크가있을 것입니다.

+0

응답 해 주셔서 감사합니다. 그게 효과가 있지만, 프로그램의 목적은 이러한 기존 파일을 가져 와서 읽을 수 있으므로 각 파일에서 DOCTYPE 행을 수동으로 제거 할 수 없습니다. 내가 그걸 끌어 들이고 그 태그를 무시할 수있는 방법이 있니? – kcoppock

0

를 다음 코드를보십시오) (

하는 XmlDocument 해당 xmldoc = 새로운 된 XmlDocument를;

doc.XmlResolver = null; // 이것은 DTD를 무시합니다.

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

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