Asp.net

使用 xml 類型在 SQL Server 2005 中儲存 XSLT?

  • December 4, 2009

我的 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

我能看到的兩個大問題是:

  1. 我們使用很多包含來確保我們只做一次,將 XSLT 儲存在數據庫中會阻止我們這樣做。
  2. 它使更新 XSL 變得更加有趣——我們很高興將新的 .xsl 文件轉儲到已部署的站點中,而無需對站點進行全面更新。就此而言,我們有一些程式碼可以在文件夾中查找特定於客戶端的 xsl,這些程式碼可以返回到根目錄中的公共程式碼(模板) - 所以我根本不確定重新部署的事情,但這在很大程度上取決於特定的案例,你的肯定和我們的不同。

在磁碟訪問方面,嗯……數據庫仍然必須訪問磁碟以提取數據,如果您正在談論記憶體,那麼數據庫不是啟用記憶體的要求。

必須就更新/搜尋選項達成一致 - 您可以使用 Powershell 做一些事情,但這需要在伺服器上執行,這並不總是一個好主意。

從技術上講,我看不出有什麼理由不這樣做(除了上面提到的願望之外),但實際上,無論哪種方式,它似乎都與良好的論點相當平衡。

引用自:https://stackoverflow.com/questions/1848702