13

XSLT(XML 样式表语言转换)的使用从未像互联网繁荣期间出现的许多其他语言一样流行。虽然它在使用,并且在某些情况下被大型成功公司(例如暴雪娱乐)使用,但它似乎从未成为主流。你为什么认为这是?

4

15 回答 15

26

一个问题是 XSLT看起来很复杂。任何开发人员都应该能够掌握语言结构,因为在大多数其他语言中都有类似物。问题是结构和数据看起来都完全相同,这使得很难区分两者,这使得 XSLT 比其他语言更难阅读。

第二个问题是它的用途比其他语言更有限。XSLT 擅长它的功能;对 XML 进行复杂或激进的转换。但它不像其他语言那样适用于广泛的问题,所以它的使用并不多。

第三,许多编程语言都有自己的用于转换 XML 的库。在使用 XML 的大部分时间,只需要进行小的更改或查找。XML 也可能由开发人员已经用另一种语言编写的程序生成或使用。这些因素意味着使用语言的内置实用程序更加方便。

所有这些问题导致的另一个问题是惯性。也就是说,人们不知道它,他们没有看到他们有太多需要它,所以如果有其他选择,他们会避免它作为解决方案。

您最终得到的是一种语言,它是许多开发人员在创建解决方案时的最后选择。XSLT 很可能会被避免,因为它最终会成为这项工作的最佳工具。

于 2008-09-16T21:54:31.110 回答
8

XSLT 使用函数式编程——这是大多数程序员不习惯的(因此我猜为什么有些人认为它不直观)。

于 2008-09-16T21:41:40.297 回答
7

在我看来,标准 XSLT(我说的是 XSLT 1.0,因为这是我使用的唯一版本)中最烦人的事情之一是它缺乏对字符串转换和一些基本日期时间函数操作的支持。

我永远无法理解的一件事是为什么诸如 translate() 之类的函数被设计并实现到 xpath 中,而其他更有用的函数(例如replaceto_lowerto_upper ,或者 - 让我们疯狂一下 - 正则表达式却没有。

我猜这些问题中的一些问题是用eXSLT(扩展的xslt?)解决了微软的MSXML以外的解析器。我说我猜是因为我实际上从未使用过它,因为它被声明为与 MSXML 不兼容。

我不明白为什么 XSLT 1.0 是按照“文本”操作不在语言范围内的原则设计的,因为很明显,无论何时转换文件都无法避免那些字符串转换问题(例如:转换以法语格式以美国格式给出的不规则填充日期,2008 年 1 月 1 日至 2008 年 1 月 31 日)呵呵...

这些文本操作问题通常是非常基本的,并且可以通过允许使用 JScript 函数扩展 XSL 在 MSXML 中轻松解决:您可以调用 JScript 函数来执行一些处理,就像调用任何 XSL 模板一样,但我总是发现该解决方案不优雅且最终创建了我自己的 XSL 模板库。首先是因为 JScript 方式破坏了您的 XSL 可移植性,然后是因为它迫使您将编程逻辑混合在一起:纯 XPath/XSLT 表达式中的一些位和 DOM/对象表示法中的其他位与 JScript。

没有可更新的变量是另一个让新手非常困惑的限制,有些人只是没有克服这一点并一直在努力解决这个问题。在一些简单的情况下,您可以使用参数化模板和递归调用(例如实现递增或递减计数器)的混合解决方法,但让我们面对现实吧,递归并不是那么自然。

我想我听说所有这些限制都在 XSLT 2.0 规范中得到解决,遗憾的是 MS 决定不实现它,而是推广 XQuery。这很可悲,为什么不同时实现它们呢?我认为 XSLT 仍然很有可能像 CSS 对 HTML 一样流行。仔细想想,学习 XSLT 最难的部分就是 XPath,其余的都不如理解 CSS 中的级联行为那么难,而且 CSS 变得如此流行……

因此,在我看来,正是这里提到的所有这些小东西的缺失以及在 XSLT 2.0 中处理它们所花费的时间(甚至连 MS 都不支持它)导致了这种不受欢迎的情况。我多么希望MS最终决定实施它......

于 2008-10-20T22:27:26.357 回答
5

因为大多数 XSLT 实现都有很高的内存占用(我想这是由语言的设计造成的),因为人们倾向于滥用 XSLT 来处理它并不特别适合的各种事情以及 XSL 的纯声明性质这使得某些类型的转换非常困难。

于 2008-09-16T21:36:29.170 回答
4

它对 xml 很好,但对典型的编码来说不是很好。它缺乏典型的基本概念(即可变变量)并使应该简单的事情变得相当复杂(或不可能)。它的大部分问题源于这样一个事实,即 xml 是一种出色的数据表示语言,但不是一种出色的编程语言。话虽如此,我每天都使用它,并会在有意义的地方推荐它。结合外部命名空间,它可以变得更有用(调用 java 等)。最后,它是另一种需要学习的语言,许多程序员更愿意坚持使用他们习惯或类似于他们习惯的东西。

于 2008-09-16T21:39:33.143 回答
4

因为编写和维护使用 Java、C#、JavaScript 等反序列化 XML 流、对其进行转换和导出所需输出的代码更容易,而 XSLT 并没有提供实质性的性能优势。

XSLT 使某些事情变得容易,但它使其他事情变得非常非常困难。

于 2008-09-16T21:47:36.710 回答
3

XSL 是主流并被广泛采用。你指的是什么其他语言?XSL 不是一种编程语言,只是一种转换语言,因此它的范围非常有限。

于 2008-09-16T21:34:04.887 回答
3

嗯……也许是因为写 xslt 很痛苦……几个月前我不得不写几个 xslt,我梦想着尖括号……

<Really> 
    <No>
        <fun/>
    </No>
</Really>         

(我知道,这不是 xslt)

于 2008-09-16T21:35:07.803 回答
3

通常,您需要将 XML 数据转换为不同形式的 XML 数据但不对其进行任何其他处理的时间将非常有限。通常 XML 用作两个独立系统之间的中介,其中一个通常是定制的以处理另一个系统的输出。因此,只需编写一个系统来处理另一个系统的 XML 输出就更简单了,而无需执行某种转换的额外步骤。

于 2008-09-16T21:37:14.147 回答
3

如前所述,XSLT(就像 JavaScript 的“优点”)是一种函数式编程语言。大多数传统程序员讨厌这种无国籍状态。还有太多的传统程序员讨厌尖括号。

但是,最重要的是,正确使用 XSLT 以一种与平台无关的方式解决了 Web 服务器的声明式 GUI 生成和数据绑定问题。像微软这样的供应商没有动力去庆祝这种“不方便”的力量。

但是,我认为 Microsoft 对 IDE (Visual Studio)拥有世界上最好的 XSLT 支持。

于 2008-10-17T04:54:01.070 回答
2

我认为归结为 XML 语法对于描述数据可以说是很好的,但对于本质上是一种编程语言 (XSLT) 来说,它并不是一个很好的语法。

于 2008-09-16T21:48:35.913 回答
1

我认为它试图涵盖太多用例,从而成为图灵完备的(或者我听说过的)语言。如果您尝试进行任何重要的转换,您最终会用一种丑陋而冗长的语言编写复杂的循环、条件……最好使用 GPL 来完成。

在我看来,这种复杂性使得编写正确的 XSLT 实现变得困难,并且限制了可用的选择,因此,在经常喜欢修改小而高效的代码而不是企业代码的大声黑客中广泛使用。

于 2008-09-16T21:44:25.750 回答
1

XSLT 非常强大,但需要以不同的方式思考问题。由于在早期版本中没有提供有用的数据功能,它也给自己带来了麻烦。以 ToUpper() 样式方法为例,您通常使用以下方式实现它:

<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>  

<xsl:value-of select="translate($toconvert,$lcletters,$ucletters)"/>

不是最简单的编码方式!

于 2008-09-16T21:46:49.427 回答
1

当您拥有已经转义的数据以及输入和输出的明确定义时,xslt 非常适合 xml 到 xml。对我来说,将它用于 xml2html 之类的东西似乎让人头疼,而且几乎任何动态语言和 css 的输出都更容易用样式实现。

于 2008-09-16T21:58:28.137 回答
1

我发现它非常适合“复合 Web 服务架构”。有时许多 Web 服务协同工作以获得最终输出。当这些 Web 服务需要通过 XML 在它们之间进行通信时,XSLT 可以将 xml 消息从一种形式转换为另一种形式。

于 2010-09-21T13:53:43.767 回答