我在我的ASP.NET网站中有很多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);
}
我希望将XSL定义移入SQL Server,使用xml类型的列。我会在SQL中将整个XSL文件存储在单个行中,并且每个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。