模板:XSLT 与 jQuery

Posted

技术标签:

【中文标题】模板:XSLT 与 jQuery【英文标题】:Templates: XSLT vs jQuery 【发布时间】:2011-11-30 16:06:17 【问题描述】:

我需要一个与我的应用程序捆绑在一起的 html 页面的模板机制。起初我查看了所有的 javascript 模板解决方案(如 jQuery 模板),但由于我的输入数据是 XML,我突然又想起了 XSLT。我遇到了几十个库,但似乎没有一个使用 XSLT,所以我完全忘记了它的存在,以及它对创建模板的用处。

那么,XSLT 是否被 javascript 替代品慢慢弃用和淘汰?我在某处读到 XSLT 对于大多数用户来说太复杂了,但这是它唯一的缺点还是还有更多的缺点?

更新:我自己只能想到一个缺点:使用 XSLT,必须在向用户显示任何内容之前解析/呈现整个页面,并且使用 javascript,页面已经可见并且缺失的元素随后被填充。

【问题讨论】:

最大的“缺点”是 XSLT 可能会给扁平的大脑带来意想不到的皱纹。 :) 非常好的评论!因为使用 xslt 其他所有选项似乎都很冗长:P 尽管剃须刀看起来值得考虑。不要忘记您仍然可以在模板中使用脚本! 【参考方案1】:

XSLT 是一种现代 XML 转换和函数式编程语言。即将推出的 3.0 版本机支持(连同 XPath 3.0)高阶函数以及其他新功能。

XSLT 并不“旧”(很少有人知道 XSLT 2.0 或知道 XSLT 3.0 正在由 W3C XSLT WG 开发)。

浏览器中的 XSLT 最近得到了 Saxon CE 的大力推动——一个精简的 XSLT 2.0 处理器,它从 Java 编译为 Javascript,可在五种主要浏览器的客户端上使用. @Michael Kay 甚至在他的 iPhone 上演示了运行客户端的 XSLT 2.0...

【讨论】:

知道微软是否/何时计划在其开发平台上支持 XSLT 2.0? 对于服务器端的转换,它仍然可以使用,但对于客户端,我找不到任何使用它的人。唯一使用它的大型网站是暴雪魔兽门户网站,甚至他们也停止使用它。此外,当我寻找类似于 XSLT 的东西时,除了 JSON 数据之外,什么也找不到(除了一些概念证明)。那么如果这个概念仍然存在,为什么没有人为 JSON 开发类似的东西? JSON 真正用于压缩数据,而 XML 应该用于标记整个文档。它们并不能完全满足相同的需求。 感谢您提供撒克逊 CE 信息。这真的很强大。我正在使用它来开发一个网络应用程序,精通技术的用户可以创建自己的页面布局,而无需编写完整的代码。他们只创建简单的 XML 文件,其余的由 Saxon 和 jQuery 完成。【参考方案2】:

XSLT 是一个很好的模板解决方案。语言和语法有点不寻常——“选择/何时”而不是“案例/切换”是一个明显的例子——但它做得很好。

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

缺点是它是一项(相对)较旧的技术,已在很大程度上被废弃,虽然浏览器仍然支持它,但他们并没有向前推进。 Firefox 有一个 HTML 转义问题,他们有 no intention of fixing,而 Chrome 有 a pretty major problem with @includes。 IE 显然是最新的,但当然只适用于最新版本。

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

【讨论】:

我想我会在服务器端渲染它。就性能而言,这并不重要,因为服务器/客户端代码都在同一台机器上运行,因为它是一个桌面应用程序,但它可以防止像你提到的浏览器特定的问题。【参考方案3】:

在浏览器中呈现 XSLT 有一些奇怪的特定于浏览器的怪癖。如果需要在客户端呈现数据,我宁愿使用 jQuery 模板。

在服务器端,XSLT 是一个很棒的工具,它支持许多编程语言(至少对于 XSLT 1.0,对于 XSLT 2.0,您只能在 Java 和 .NET 之间进行选择)。因此,也许您可​​以使用某种中间件来获取客户端请求,将其传递给 Web 服务或生成 XML 的任何东西,将其呈现为带有 XSLT 样式表的 HTML,并将 HTML 结果传递给浏览器。如果您的特定场景允许在中间件层进行缓存,您的应用程序也会更快,因为客户端不必处理 jQuery 或 XSLT 模板。

【讨论】:

但是您不能缓存动态数据,除非基于每个用户、每个视图。【参考方案4】:

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

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

【讨论】:

以上是关于模板:XSLT 与 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

用于在 HTML 中生成列表的 XSLT 通用模板

Selenium 不可见使用 XSLT 模板创建的元素

XSLT转换无法模板匹配

xml 内部CMS的基本XSLT模板

XSLT 1.0 - 用 HTML 包装的多个子节点模板

XSLT中的内置模板