使用xml类型在SQL Server 2005中存储XSLT?

Jef*_*ang 8 sql asp.net xslt sql-server-2005

我的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);        
}
Run Code Online (Sandbox Code Playgroud)

我想使用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);     
    }   
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一种直截了当的方式:

  • 向每个XSL添加元数据,如lastUsed,useCount等.
  • 批量更新/搜索功能
  • 防止大量磁盘访问
  • 避免引用相对路径和组织文件
  • 允许XSL更改而无需重新部署(我甚至可以编写一个管理页面来选择/更新数据库中的XSL)

有人曾尝试过这个吗?有什么警告吗?

编辑

响应者列出的注意事项:

  • 磁盘访问不能保证减少
  • 这将打破xsl:includes

Mur*_*rph 3

我看到的两个大问题是:

  1. 我们使用大量包含来确保我们只做一次事情,将 XSLT 存储在数据库中会阻止我们这样做。
  2. 它使更新 XSL 变得更加有趣 - 我们非常高兴将新的 .xsl 文件转储到已部署的站点中,而无需对站点进行完整更新。就此而言,我们有一些代码可以在文件夹中查找客户端特定的 xsl,并且这些代码可以返回到根目录中的通用代码(模板) - 所以我根本不确定重新部署的事情,但这在很大程度上取决于特定的用例,您的肯定与我们的不同。

在磁盘访问方面,嗯...数据库仍然必须访问磁盘来提取数据,如果您谈论的是缓存,那么数据库不是启用缓存的要求。

必须就更新/搜索选项达成一致 - 您可以使用 Powershell 执行操作,但这需要在服务器上运行,这并不总是一个好主意。

从技术上讲,我看不出有什么理由不这样做(除了希望包括上述内容),但实际上,无论哪种方式,它似乎都与良好的论点相当平衡。