Tôi có rất nhiều tệp XSL trong ứng dụng web ASP.NET của mình. Rất nhiều. Tôi tạo ra một loạt các phản hồi HTML AJAX bằng cách sử dụng loại phương pháp biến đổi chung này:Lưu trữ XSLT trong SQL Server 2005 với loại xml?
public void Transform(XmlDocument xml, string xslPath)
{
...
XslTransform myXslTrans = new XslTransform();
myXslTrans.Load(xslPath);
myXslTrans.Transform(xml,null, HttpContext.Current.Response.Output);
}
Tôi muốn di chuyển các định nghĩa XSL vào SQL Server, sử dụng cột loại xml. Tôi sẽ lưu trữ toàn bộ tệp XSL trong một hàng trong SQL và mỗi XSL là tự chứa (không có nhập). Tôi sẽ đọc ra định nghĩa XSL từ SQL vào đối tượng XslTransform của tôi.
Something như thế này:
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);
}
}
Nó có vẻ như là một cách đơn giản để:
- add metadata cho mỗi XSL, như lastUsed, useCount vv
- số lượng lớn khả năng cập nhật/tìm kiếm
- ngăn chặn nhiều truy cập đĩa
- tránh tham chiếu đường dẫn tương đối và organizin g file
- cho phép thay đổi XSL mà không redeploying (Tôi thậm chí có thể viết một trang admin mà chọn/cập nhật các XSL trong cơ sở dữ liệu)
Có ai đã thử này trước đây chưa? Có bất kỳ cảnh báo nào không?
EDIT
Hãy cẩn thận rằng phản ứng đã liệt kê:
- truy cập đĩa không được bảo đảm để làm giảm
- này sẽ phá vỡ xsl: bao gồm
Cảm ơn! Ví dụ tốt về xác thực XSLT. Về mặt hiệu suất, bạn có thực sự trải qua sự gia tăng của đĩa I/O không? Tôi cần phải làm một số thử nghiệm, nhưng tôi đã theo ấn tượng rằng SQL Server có thể sử dụng một bộ nhớ cache dữ liệu trong bộ nhớ đáng kể. –