我的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);
}我想使用xml类型的列将XSL定义移到Server中。我会在SQL中将整个XSL文件存储在一行中,并且每个XSL都是自包含的(没有导入)。我会将XSL定义从SQL中读出到我的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);
}
}这似乎是一个直截了当的方法:
以前有人试过吗?有什么警告吗?
编辑
请注意,响应者已列出:
发布于 2009-12-04 18:26:20
我能看到的两大问题是:
关于磁盘访问,嗯.数据库仍然必须访问磁盘才能提取数据,如果您正在讨论缓存,那么数据库并不是启用缓存的必要条件。
必须就更新/搜索选项达成一致--您可以使用Powershell进行操作,但这需要在服务器上运行,这并不总是一个好主意。
从技术上讲,我认为没有理由不这样做(除了上面提到的愿望),但实际上,无论哪种方式,它似乎都与好的论点相当平衡。
发布于 2009-12-04 18:38:35
我将XSLT存储在应用程序dbscript中的数据库中。(不过,我将它们保存在NVARCHAR列中,因为它也运行在Server 2000上)
由于用户能够编辑自己的XSLT,所以我需要编写一个自定义验证器,它将TextBox的文本加载到.Net XslCompiledTransform对象中,如下所示:
args.IsValid = true;
if (args.Value.Trim() == "")
return;
try
{
System.IO.TextReader rd = new System.IO.StringReader(args.Value);
System.Xml.XmlReader xrd = System.Xml.XmlReader.Create(rd);
System.Xml.Xsl.XslCompiledTransform xslt = new System.Xml.Xsl.XslCompiledTransform();
System.Xml.Xsl.XsltSettings xslts = new System.Xml.Xsl.XsltSettings(false, false);
xslt.Load(xrd, xslts, new System.Xml.XmlUrlResolver());
xrd.Close();
}
catch (Exception ex)
{
this.ErrorMessage = (string.IsNullOrEmpty(sErrorMessage) ? "" : (sErrorMessage + "<br/>") +
ex.Message);
if (ex.InnerException != null)
{
ex = ex.InnerException;
this.ErrorMessage += "<br />" + ex.Message;
}
args.IsValid = false;
}至于你们的观点:
https://stackoverflow.com/questions/1848702
复制相似问题