Asp.net
使用 xml 類型在 SQL Server 2005 中儲存 XSLT?
我的 ASP.NET Web 應用程序中有很多 XSL 文件。很多。我使用這種通用轉換方法生成了一堆 AJAX HTML 響應:
public void Transform(XmlDocument xml, string xslPath) { ... XslTransform myXslTrans = new XslTransform(); myXslTrans.Load(xslPath); myXslTrans.Transform(xml,null, HttpContext.Current.Response.Output); }我想使用 xml 類型的列將 XSL 定義移動到 SQL Server 中。我會將整個 XSL 文件儲存在 SQL 中的一行中,並且每個 XSL 都是獨立的(沒有導入)。我會將 SQL 中的 XSL 定義讀出到我的 XslTransform 對像中。
像這樣的東西:
public void Transform(XmlDocument xml, string xslKey) { ... SqlCommand cmd = new SqlCommand("GetXslDefinition"); cmd.AddParameter("@xslKey", SqlDbType.VarChar).Value = xslKey; // where the result set has a single column of XSL: "<xslt:stylesheet>..." ... SqlDataReader dr = cmd.ExecuteReader(); if(dr.Read()) { SqlXml xsl = dr.GetSqlXml(0); XslTransform myXslTrans = new XslTransform(); myXslTrans.Load(xsl.CreateReader()); myXslTrans.Transform(xml,null, HttpContext.Current.Response.Output); } }這似乎是一種簡單的方法:
- 向每個 XSL 添加元數據,例如 lastUsed、useCount 等。
- 批量更新/搜尋功能
- 防止大量磁碟訪問
- 避免引用相對路徑和組織文件
- 允許在不重新部署的情況下更改 XSL(我什至可以編寫一個管理頁面來選擇/更新數據庫中的 XSL)
有沒有人試過這個?有什麼注意事項嗎?
編輯
響應者列出的警告:
- 磁碟訪問不能保證減少
- 這將破壞 xsl:includes
我能看到的兩個大問題是:
- 我們使用很多包含來確保我們只做一次,將 XSLT 儲存在數據庫中會阻止我們這樣做。
- 它使更新 XSL 變得更加有趣——我們很高興將新的 .xsl 文件轉儲到已部署的站點中,而無需對站點進行全面更新。就此而言,我們有一些程式碼可以在文件夾中查找特定於客戶端的 xsl,這些程式碼可以返回到根目錄中的公共程式碼(模板) - 所以我根本不確定重新部署的事情,但這在很大程度上取決於特定的案例,你的肯定和我們的不同。
在磁碟訪問方面,嗯……數據庫仍然必須訪問磁碟以提取數據,如果您正在談論記憶體,那麼數據庫不是啟用記憶體的要求。
必須就更新/搜尋選項達成一致 - 您可以使用 Powershell 做一些事情,但這需要在伺服器上執行,這並不總是一個好主意。
從技術上講,我看不出有什麼理由不這樣做(除了上面提到的願望之外),但實際上,無論哪種方式,它似乎都與良好的論點相當平衡。