我喜欢.NET webcontrols,你可以操作事物,这是共识,但XML和XSL非常好,因为你有平台和语言无关的UI逻辑,所以有一天我改变应用程序到php、java或其他任何东西,我可以重用所有的演示逻辑。此外,在呈现之前,XSL有调用.NET(或其他)方法的可能性。
通常什么时候使用XML/XSL?为什么不更频繁地使用它们呢?
通常什么时候使用XML/XSL?为什么不更频繁地使用它们呢?
大致上来说,每当我需要将信息呈现为HTML时,我都会使用XSLT。在过去的七年里,每次我偏离这个方法后,我都感到后悔。我曾尝试使用Python生成HTML,但只是短暂的经验,可能无法取代XSLT。
除了HTML,还有其他替代品吗?
我经常使用它来代替asp.net控件,因为它可以在2.0版本中实现关注点分离,而这是你在.NET 2.0开箱即用中无法实现的。
显然,还有许多与asp.net控件无关的其他用途。
编辑:一个实现示意图
public class xsltmanager
{
/* constructor (singleton) which defines a file watcher for *.xsl in the path of your choice */
//just a mutex for thread safety
private object Mutex = new object();
//caching XslCompiledTransforms
private Dictionary<string, XslCompiledTransform> cTransforms = new Dictionary<string, XslCompiledTransform>();
public XslCompiledTransform fetch(string identifier)
{
if (!this.cTransforms.ContainsKey(identifier))
{
lock (this.Mutex)
{
if (!this.cTransforms.ContainsKey(identifier))
{
XslCompiledTransform xslDoc = new XslCompiledTransform();
xslDoc.Load(/* file path based on identifier */);
this.cTransforms.Add(identifier, xslDoc);
}
}
}
return this.cTransforms[identifier];
}
/* other util xslt methods - namespace wash, doc merge, whatever */
}
public class myPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//get source data
XPathDocument xPathDoc = myGetXMLMethod();
//transform params
XsltArgumentList oArgs = new XsltArgumentList();
/* add params as required */
//fetching and executing the transform directly to the Response here
xsltmanager.instance.get(@"foo\bar\baz").Transform(xPathDoc, oArgs, Response.OutputStream);
}
}
在ASP.NET方面不是很擅长,但在VB6时期我几乎专门使用它(在服务器上)将xml转换为html。我一直觉得它非常灵活多用途。我还在我的“protocol buffers”项目中使用它作为代码生成引擎:主要框架生成xml,然后我使用xsl转换来输出C#代码。我听说有人说他们不觉得xsl直观,但我真的很喜欢它,并且在处理xml时它是我的默认工具。
现在,我正在密切关注ASP.NET MVC,它并不一定适合使用xsl - 尽管在某些方面,<%=foo.Name%>
和<xsl:value-of select="Name"/>
之间并没有太大区别。
使用XML / XSL存在巨大的开销,并且存在许多缺点。
如果您关心逻辑分离,请使用某些模板语言(而不是XSL)。