2013-07-29 2 views
-2

xsl (스타일 시트)과 함께 xml 파일을 다운로드하고 싶습니다. XML 파일을 다운로드 내 코드는 다음과 같습니다 :xsl 파일로 xml 다운로드

XPathDocument myXPathDoc = new XPathDocument("myxml.xml"); 

       XslCompiledTransform myXslTrans = new XslCompiledTransform(); 
       myXslTrans.Load("myxsl.xsl"); 

       XmlTextWriter myWriter = new XmlTextWriter("Result.html", null); 
       myXslTrans.Transform(myXPathDoc, null, myWriter); 

       string strFullPath = Server.MapPath("Result.html"); 

       string strContents = null; 
       System.IO.StreamReader objReader = default(System.IO.StreamReader); 
       objReader = new System.IO.StreamReader(strFullPath); 
       strContents = objReader.ReadToEnd(); 
       objReader.Close(); 

       //attach that XML file and download on local machine 
       string attachment = "attachment; filename=" + myWriter; 
       Response.ClearContent(); 
       Response.ContentType = "text/html"; 
       Response.AddHeader("content-disposition", attachment); 
       Response.Write(strContents); 

내가 구글에서 검색,하지만 해결책을 찾을 수 없다. 이것에 관해서 몇 가지 아이디어를 말해라. 같은 예외를주는 것. 다른 프로세스에서 사용하고 있기 때문에 프로세스가 '~ mypath \ Result.html'파일에 접근 할 수 없다.

+0

Downvoting ??? – akeeseth

답변

0

응답에 xml을 쓰거나 xsl을 적용한 xml을 작성 하시겠습니까? 이 후자의 경우,이 링크를 확인하십시오

Applying XSLT to XML in C#

을 그냥 원시 XML을 반환하려면, 다음 코드는 이미 일을 할 것 같다. 그러나 질문의 ​​제목은 약간의 오해의 소지가 있습니다. 왜냐하면 MIME로 할 수있는 2 개의 요청으로 2 개의 파일을 다운로드하고 싶다고 표시하기 때문에 오해의 소지가 있습니다. 클라이언트가 XML 및 XSL 파일을 요청하는 경우 단순히 함께 적용하지 않는 이유는 무엇입니까?

+0

당신의 솔루션으로 질문을 업데이트했지만 '다른 프로세스에서 사용 중이므로'프로세스가 파일 '~ myprojectpath \ Result.html'에 액세스 할 수 없습니다. '와 같은 예외가 발생했습니다.' – akeeseth

+0

using() 문에서'myWriter'를 래핑해야합니다. 그렇지 않으면 제대로 처리되지 않으며 아마도'Result.html' 스트림을 열어 두었을 것입니다. 그런 다음 독자가 액세스하려고하면 그렇게 할 수 없습니다. 'Result.html' 파일에 매번 쓰는 대신에'XmlWriter'에서 문자열을 반환하고 문자열을 응답 스트림에 쓰는 대신 파일 메서드가 확장 성이 뛰어나다 고 생각할 수도 있습니다. – welegan

0

나는 하나 개의 HTML 파일을 추가하고 같은 짓을

string strFullPathXml = Server.MapPath("myxml.xml"); 
        string strFullPathXsl = Server.MapPath("myxsl.xsl"); 
        string strFullPathHtml = Server.MapPath("Result.html"); 

        XPathDocument xPathDoc = new XPathDocument(strFullPathXml); 
        XslCompiledTransform xslTrans = new XslCompiledTransform(); 
        xslTrans.Load(strFullPathXsl); 

        XmlTextWriter xWriter = new XmlTextWriter(strFullPathHtml, null); 
        xslTrans.Transform(xPathDoc, null, xWriter); 
        xWriter.Close(); 

        Response.ContentType = "text/html"; 
        Response.AppendHeader("Content-Disposition", "attachment; filename=Result.html"); 
        Response.ClearContent(); 
        Response.WriteFile(strFullPathHtml); 
        Response.Flush(); 
Response.End(); 

아래 후 사람이 읽을 수있는 형식으로 자사의 다운로드 html 파일이.