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,HttpContext.Current.Response.Output);     
    }   
}

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

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

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

编辑

响应者列出的注意事项:

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

解决方法

我能看到的两大问题是:

>我们使用了很多包含来确保我们只执行一次,将XSLT存储在数据库中会阻止我们这样做.
>它使更新XSL更有趣 – 我们非常乐意将新的.xsl文件转储到已部署的站点,而无需对站点进行全面更新.就此而言,我们有一些代码可以在文件夹中查找客户端特定的xsl,而这些代码可以回溯到根目录中的公共代码(模板) – 所以我不确定重新部署的东西是什么,但这在很大程度上取决于具体的用例,你的肯定与我们的不同.

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

必须同意更新/搜索选项 – 您可以使用Powershell进行操作但需要在服务器上运行,这并不总是一个好主意.

从技术上讲,我没有理由不这样做(除了希望做的包括如上所述),但实际上它似乎与任何方式的良好论据相当平衡.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...