【发布时间】:2008-12-23 10:11:32
【问题描述】:
我喜欢 .NET 网络控件,而你操纵事物,这是普遍的共识,但 XML 和 XSL 非常棒,因为你有独立于平台和语言的 UI 逻辑,所以有一天我将应用程序更改为 php、java 或不管怎样,我都可以重用所有的表示逻辑。 此外,XSL 可以在渲染之前调用 .NET(或其他)方法。
你什么时候正常使用XML/XSL?为什么不更频繁地使用它?
【问题讨论】:
我喜欢 .NET 网络控件,而你操纵事物,这是普遍的共识,但 XML 和 XSL 非常棒,因为你有独立于平台和语言的 UI 逻辑,所以有一天我将应用程序更改为 php、java 或不管怎样,我都可以重用所有的表示逻辑。 此外,XSL 可以在渲染之前调用 .NET(或其他)方法。
你什么时候正常使用XML/XSL?为什么不更频繁地使用它?
【问题讨论】:
而不是 HTML?
我经常使用它来代替 asp.net 控件,因为它提供了 2.0 中 V 和 C 的关注点分离,而 .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);
}
}
【讨论】:
首先,当我需要将信息呈现为 HTML 时,我会使用 XSLT。在过去的七年里,几乎每次我偏离这一点时,我都会后悔。我在 Python 中生成 HTML 的简短经验是我遇到的唯一可能能够替代它的东西。
【讨论】:
在 ASP.NET 方面并没有那么多,但在此之前(使用 VB6)我过去几乎只使用它(在服务器上)将 xml 转换为 html。我一直觉得它用途广泛。我还在我的“protocol buffers”项目中使用它作为代码生成器引擎:主框架生成 xml,然后我使用 xsl 转换生成 C#。我听人说他们不觉得 xsl 直观,但我真的很喜欢它,而且它是我处理 xml 时的默认 ttool。
现在,我正在研究 ASP.NET MVC,它不一定非常适合 xsl - 尽管在某些方面,<%=foo.Name%> 和 <xsl:value-of select="Name"/> 之间没有太多关系。
【讨论】:
使用 XML/XSL 的开销很大,并且有很多缺点。
如果您担心逻辑分离,请使用一些模板语言(不是 XSL)。
【讨论】: