2009-08-05 2 views
0

C#의 URL에서 XML을로드하려고하는데 문제는 XML 파일에 xsl이 첨부되어 있다는 것입니다. xml 파일의 내용은 xsl을 사용하여 변환 된 html입니다.URL에서 xml을 C#에서 스타일을 지정하지 않고로드하는 중

xml을 먼저 변형하지 않고로드하는 방법이 있습니까? xml의 내용 만 가져올 수 있습니까?

+0

시도해 보셨습니까? 변환 작업을 본 적이 있습니까? –

+0

이 코드를 사용했습니다 : XmlTextReader myReader = new XmlTextReader ("http://eu.wowarmory.com/character-sheet.xml?r=Stormreaver&n=Sebassis"); myReader.XmlResolver = null; XmlDocument mySourceDoc = new XmlDocument(); mySourceDoc.Load (myReader); myReader.Close(); Visual Studio에서 디버깅 할 때 오류가 발생하고 myReader 값에 xml이 아닌 html이 포함됩니다. – Tuvix

답변

2

URL에 ".xml"이 있다는 사실이 서버가 XML을 제공한다는 의미는 아닙니다. 귀하의 예제에서 제공 한 URL의 경우, 서버는 XHTML을 방출합니다. (나는 또한 그 파일에있는 당신의 코멘트에서 언급 한 xml-stylesheet 프로세싱 지시어를 보지 않고있다. 두 가지 다른 것을보고 있는지 궁금하게 만든다.) 클라이언트 측에서 변경할 수있는 것은 아무것도 없다. 서버에서 원시 XML을 가져 오기 위해 URL을 공식화하는 방법이 있다면 해당 사이트에 문서화되어 있지 않습니다.

XHTML을 잘 처리하지 못하는 XML을 처리하는 것처럼 보입니다 (구문 분석을 시도 할 때 판단). 그것들은별로 좋지 않습니다.

편집 :

좋아, 여기 범인이 사이트는 외관상으로는 XML 또는 HTML을 전송할지 여부를 결정하기 위해 사용자 에이전트를 확인한다는 것입니다.

string url = "http://eu.wowarmory.com/character-sheet.xml?r=Stormreaver&n=Sebassis"; 

    HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); 
    httpRequest.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"; 

    using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse()) 
    { 
     XmlDocument xmlDocument = new XmlDocument(); 
     xmlDocument.Load(httpResponse.GetResponseStream()); 
     Console.Write(xmlDocument.OuterXml); 
    } 

을 나는 그들이 그렇게하는 이유를 말할 수 있으면 좋겠다, 그리고 왜이 사용자 에이전트 작품 : 대답 here는 (? 어떤 이유기도에 StackOverflow에 마틴 Honnen 아닌)을 수행하는 방법을 보여줍니다 다른 사람들은 그렇지 않지만 내 전문 분야를 벗어난 곳입니다. 어쩌면 다른 누군가가 이것에 대해 밝힐 수 있습니다.

+0

메모장에서 XML을 열어 보았습니다. ++. 이렇게하면 변형 된 결과가 아니라 실제 XML을 얻습니다. 이것은 또한 xml-stylesheet 처리 지시어를 보았습니다. 그래서 왜 .Net에서 XML을 열 수 없는지 이해할 수 없습니다. – Tuvix

+0

그랬어! 도움을 주셔서 대단히 감사합니다. – Tuvix

0

서버가 파일을 제공하기 전에 파일을 변환하는 경우, 변환 된 버전 만 얻을 수 있습니다. 그러나 XSL 스타일 시트를 참조하는 처리 명령 만 지정하고 브라우저가이를 변환하면 XML이 기본적으로 제공됩니다.

+0

xsl은 다음과 같이 xml에 지정됩니다. xml을 가져 오지 않을까요? 변형 된 버전이 아닌가? 그 경우 내가 XmlDocument.Load()를 사용하여로드 할 수 없어야합니까? – Tuvix

+0

물론 XML을 얻을 수 있습니다. 'XmlDocument'는 자동으로 아무것도 변환하지 않습니다. –

0

HttpWebRequest 개체의 Accept 속성을 "text/xml"로 설정해 보았습니까?

+0

이 속성은 변환 된 XML과 원본 XML을 비교하는 데 어떤 차이가 있습니까? –

+0

Accept 속성은 HTTP 요청의 Accept Header 값을 나타냅니다. 그것은 당신이 받아들이거나 원하는 MIME-Types와 다중 선택이 가능하다는 환경 설정을 정의합니다. 기본적으로 요청 개체는 텍스트/HTML을 선호하므로 응답하는 웹 서버가 해당 환경 설정을 수용 할 수 있습니다. 나는 서버의 응답을 바꿀 수있는 기회를 놓치지 않고 XML에 대한 환경 설정을 제안했다. – MyItchyChin

+0

HttpWebRequest 객체를 사용하고 text/xml에 accept 속성을 설정하면 동일한 결과를 얻습니다. – Tuvix

관련 문제