2009-11-18 77 views
0

我在我們的CRM系統中嵌入了一個HTML控件,並用它來顯示一些XML。我想使用XSL文檔格式化它。我可以將XSL的內聯規範放入XML文檔嗎?

一切工作正常,當我用的test.xml和test.xsl本地測試,但當然,當我改變XSL鏈接

\\servername\share\test.xsl 

那麼它不工作,我想是因爲該位置不受信任。

我可以將XSL插入XML文檔嗎?當我無法真正使用相對路徑時,我還能如何格式化瀏覽器控件的內容?

感謝

+0

忘了提及XML是由.Net應用程序使用XMLDocument等生成的 – Cylindric 2009-11-18 14:48:15

+3

'\ servername \ share'?您是否嘗試將XSL與XML一起放在Web服務器上?這應該工作。 – Tomalak 2009-11-18 15:55:40

+0

那麼,XML就會生成並存儲在數據庫字段中,並且只是在窗體上的瀏覽器控件中顯示出來 - 它實際上並不存在任何「真實」的地方。 現在,我已經使用了應用程序自己的每個用戶文件夾,並將XSL文件和生成的XML複製到那裏,這樣它們對瀏覽器都是「本地」的。 希望瀏覽器中不需要臨時文件的解決方案:( – Cylindric 2009-11-19 09:44:34

回答

0

一種技術我經常使用的是編譯XSLT到我的.NET程序集的清單資源。如果您的XSLT文件位於Visual Studio中,則可以在文件屬性中將「構建操作」設置爲「嵌入式資源」。然後資源的名稱成爲項目的默認命名空間,後面跟着文件的名稱(我認爲....通常我編譯程序集,然後用ILDASM在清單中查找名稱來檢查名稱)。

無論如何 - 一旦你知道這個名字,你可以得到這樣的功能轉換(注意,這是我的事業裝配,因此GetCallingAssembly ....在不同的設計,你可以使用GetExecutingAssembly):

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,但在這種情況下無需單獨將其部署到文件系統。

相關問題