模板:XSLT vs jQuery

15

我需要一个与我的应用程序一起打包的 HTML 页面模板机制。一开始我看了所有的 JavaScript 模板解决方案(例如 jQuery 模板),但由于我的输入数据是 XML,所以我突然想起了 XSLT。我找到了许多库,但似乎没有一个库使用 XSLT,所以我完全忘记了它的存在,以及用它创建模板非常有用。

那么,XSLT 是否正在被 JavaScript 的替代方案逐渐淘汰和取代呢?我在某个地方读到过,XSLT 对大多数用户来说太复杂了,但这是它唯一的缺点吗,还是还有其他的缺点?

更新:我自己只能想到一个缺点:使用 XSLT 时,在向用户显示任何内容之前必须解析/渲染完整个页面,而使用 JavaScript 时,页面已经可见,缺少的元素稍后填充。


3
最大的“缺点”是XSLT可能会让一个思维僵化的人感到意外和困惑。 :) - Dimitre Novatchev
1
非常好的评论!自从使用XSLT以后,其他选项似乎都太冗长了 :P 虽然Razor看起来值得考虑。不要忘记你仍然可以在模板中使用脚本! - Treemonkey
4个回答

8

XSLT是一种现代的XML转换和函数式编程语言。即将推出的3.0版本原生支持(与XPath 3.0一起)高阶函数,以及其他新特性。

XSLT并不是“老旧”的技术(很少有人知道XSLT 2.0或意识到W3C XSLT WG正在开发XSLT 3.0)。

通过Saxon CE ,浏览器中的XSLT最近取得了重大进展 - 这是一个经过精简的XSLT 2.0处理器,它从Java编译到Javascript,可在五个主要浏览器上客户端使用。甚至@Michael Kay 在他的iPhone上演示了运行在客户端的XSLT 2.0...


你知道微软是否有计划在他们的开发平台上支持XSLT 2.0吗? - Darrel Miller
对于服务器端的转换,它仍然可能被使用,但是对于客户端,我找不到任何人使用它。唯一使用它的大型网站是暴雪魔兽世界门户网站,即使他们也停止了使用它。此外,当我寻找类似于 XSLT 的东西,除了 JSON 数据之外,没有找到任何东西(除了一些概念验证)。所以,如果这个概念还活着,为什么没有人为 JSON 开发类似的东西呢? - Maestro
1
JSON真正意义上是用于紧凑数据的,而XML则被认为是用于标记整个文档的。它们并不完全填补相同的领域。 - Blazemonger
2
感谢提供Saxon CE的信息。这真的非常强大。我正在使用它来开发一个Web应用程序,技术娴熟的用户可以创建自己的页面布局,而无需编写完整的代码。他们只需创建简单的XML文件,然后Saxon和jQuery就会完成其余的工作。 - ChrisR

7

XSLT是一个很好的模板解决方案。语言和语法有点不寻常——"choose/when" 而不是 "case/switch" 就是一个显眼的例子——但它能很好地完成工作。

XSLT的主要优点是您不需要JavaScript来使用它; 如果构建得当,每个主要浏览器都会将其呈现为HTML,无论JS是否启用。它可能比JavaScript解决方案更容易处理器负担,尽管我不知道有谁测试过这一点。如果您已经在处理XML数据,则它也是明显的选择。

缺点是它是一个(相对)旧的技术,已经被大量放弃,而虽然浏览器仍然支持它,但它们没有向前发展。Firefox存在HTML转义问题,他们no intention of fixing,Chrome存在a pretty major problem with @includes。IE显然是最新版本,但这当然只适用于最新版本。

结论是,如果您想使用XSLT,您必须在所有主要浏览器中进行测试并解决错误,尽管该技术至少已经存在自2006年以来。它绝不会被弃用,只是因为它不像JSON + jQuery模板那样紧凑易读,所以并不是很受欢迎。

1
我认为我将在服务器端进行渲染。对于性能来说并不重要,因为服务器/客户端代码都在同一台机器上运行,因为它是一个桌面应用程序,但它可以防止浏览器特定的问题,比如你提到的那个。 - Maestro

0
在浏览器中呈现XSLT存在一些奇怪的浏览器特定问题。如果我需要在客户端渲染数据,我宁愿使用jQuery模板。
在服务器端,XSLT是一个很好的工具,支持许多编程语言(至少对于XSLT 1.0来说,对于XSLT 2.0,您只能选择Java和.NET)。因此,也许您可以有某种中间件,该中间件会获取客户端请求,将其传递给Web服务或生成XML的任何其他内容,使用XSLT样式表将其呈现为HTML,并将HTML结果传递给浏览器。如果您的特定方案允许在中间件层进行缓存,那么您的应用程序也将更快,因为客户端不必处理jQuery或XSLT模板。

但是除了按用户和视图的基础进行缓存之外,您无法缓存动态数据。 - Andrew

-1

这里有一个在Javascript中加载XML和XSL并执行转换的示例。 http://www.w3schools.com/xsl/xsl_client.asp

有时候不可能在XML文档中导入XSLT,例如从第三方获取XML并使用您的XSLT转换为HTML并在浏览器中呈现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接