2009-11-18 4 views
0

나는 CRM 시스템에 HTML 컨트롤을 내장하고 있으며이를 사용하여 약간의 XML을 표시합니다. XSL 문서를 사용하여이 형식을 지정하고 싶습니다. 나는 test.xml의와 test.xsl에 로컬로 테스트 할 때XSL의 인라인 사양을 XML 문서로 옮길 수 있습니까?

모든 것이 잘 작동하지만 물론 나는 때문에 상상, 그것은 작동하지 않는

\\servername\share\test.xsl 

에 XSL 링크를 변경할 때 위치는 신뢰할 수 없습니다.

XML 문서에 XSL을 삽입 할 수 있습니까? 상대 경로를 실제로 사용할 수 없을 때 어떻게 브라우저 컨트롤의 내용을 포맷 할 수 있습니까?

덕분에 내가 자주 사용

+0

XMLDocument 등 – Cylindric

+3

'\ servername \ share'을 사용하여 .Net 앱에서 XML을 생성한다고 언급하는 것을 잊어 버리셨습니까? XML과 함께 XSL을 웹 서버에 넣으려고 했습니까? 이것은 효과가있다. – Tomalak

+0

글쎄, XML은 DB 필드에 생성되어 저장되고 양식의 브라우저 컨트롤에서 재생됩니다. 실제로는 "실제"아무 곳에도 존재하지 않습니다. 지금까지는 응용 프로그램의 사용자 별 폴더를 사용하고 XSL 파일과 생성 된 XML을 여기에 복사했습니다. 모든 방식으로 브라우저에 "로컬"입니다. 임시 파일이 필요하지 않은 브라우저 내 솔루션을 기대했습니다. ( – Cylindric

답변

0

한 기술은 매니페스트 리소스로 내 .NET 어셈블리에 XSLT를 컴파일하는 것입니다. XSLT 파일이 Visual Studio에 있으면 파일 속성에서 "Build Action"을 "Embedded Resource"로 설정할 수 있습니다. 그런 다음 리소스의 이름이 프로젝트의 기본 네임 스페이스가되고 파일 이름이옵니다. (일반적으로 어셈블리를 컴파일 한 다음 ILDASM을 사용하여 매니페스트에서 파싱하여 이름을 확인합니다.) 어쨌든

- 당신이 이름을 알고 나면, 당신은이 같은 함수 변환을 얻을 수있다 (참고, 이것은 당신이 GetExecutingAssembly를 사용할 수 있습니다 다른 디자인 .... 따라서 GetCallingAssembly 해당 어셈블리 내 유틸리티에) :

public static XslCompiledTransform GetTransformByResourceName(string resourceName) 
{ 
    XslCompiledTransform transform = new XslCompiledTransform(false); 
    using (Stream manifestResourceStream = 
      Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName)) 
    using (XmlTextReader reader = new XmlTextReader(manifestResourceStream)) 
    { 
    XsltSettings settings = new XsltSettings(false, false); 
    transform.Load(reader, settings, new XmlUrlResolver()); 
    } 
    return transform; 
} 

물론 어떤면에서는 유연성/구성 가능성을 잃지 만 코드가 XSLT를 찾을 수 있다는 것을 알고 있습니다.

변환을 서버로 옮기는 것이 도움이되는지 여부를 알기에는 충분한 설계 지식이 없습니다. 클라이언트 측 변환을 수행해야하는 경우에도 .NET 응용 프로그램에서 이미 XML을 제공하고 있다면 XSLT도 함께 제공 할 수 있지만이 경우 파일 시스템에 별도로 배포하지 않아도됩니다.

관련 문제