В моем веб-приложении 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.
Я хотел бы хранить весь файл XSL в одной строке в SQL, и каждый 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);
}
}
Это простой способ:
- добавить метаданные к каждому XSL, например lastUsed, useCount и т. Д.
- Возможность массового обновления / поиска
- предотвратить много доступа к диску
- избегайте ссылок на относительные пути и упорядочивание файлов
- разрешить изменения XSL без повторного развертывания (я мог бы даже написать страницу администратора, которая выбирает / обновляет XSL в базе данных)
Кто-нибудь пробовал это раньше? Есть ли какие-либо предостережения?
EDIT
Предупреждения, перечисленные респондентами:
- доступ к диску не гарантированно уменьшится
- это сломает xsl: включает