使用XSLT(XML样式表语言转换)从未见过互联网热潮期间出现的许多其他语言的普及。虽然它正在使用,在某些情况下是由大型成功公司(即暴雪娱乐公司)使用,但它似乎从未成为主流。为什么你认为这是?
答案 0 :(得分:24)
一个问题是XSLT 看起来很复杂。任何开发人员都应该能够学习语言结构,因为大多数其他语言都有类比。问题是构造和数据都看起来完全相同,这使得很难区分使得XSLT比其他语言更难以阅读的两者。
第二个问题是它的用途比其他语言更有限。 XSLT非常出色;在XML上进行复杂或激进的转换。但它并不适用于与其他语言一样广泛的问题,因此它没有被使用太多。
第三,许多编程语言都有自己的用于转换XML的库。大多数情况下,使用XML时,只需要进行小的更改或查找。 XML也可能是由开发人员已经用另一种语言编写的程序生成或使用的。这些因素意味着使用语言的内置实用程序会更方便。
所有这些问题导致的另一个问题是惯性。也就是说,人们不知道它,他们没有看到他们对它有太多需求,所以如果有另一种选择,他们就会避免将其作为解决方案。
您最终得到的是一种语言,它是许多开发人员在创建解决方案时的最后选择。 XSLT很可能甚至被避免,因为它将成为工作的最佳工具。
答案 1 :(得分:9)
XSLT使用函数式编程 - 这是大多数程序员不习惯的(因此有些人认为我认为它不直观)。
答案 2 :(得分:7)
在我看来,标准XSLT中最讨厌的东西之一(我说的是XSLT 1.0,因为这是我用过的唯一版本)是它缺乏对字符串转换和一些基本日期时功能操作的支持。
我无法理解的一件事是为什么诸如translate()之类的函数被设计并实现到xpath中,其他更有用的函数,例如替换, to_lower ,< em> to_upper,或 - 让我们发疯 - 正则表达式不是。
对于除Microsoft的MSXML以外的解析器,我猜这些问题中有一些是eXSLT(扩展的xslt?)。我说我猜是因为我实际上从未使用它,因为它被声明与MSXML不兼容。
我不明白为什么XSLT 1.0的设计原则是“文本”操作不在语言范围内,因为很明显,无论何时转换文件,都无法避免这些字符串转换问题(例如:将法语格式的不规则填充日期转换为美国格式,2008年1月31日至2008年1月31日)呵呵......
这些文本操作问题通常非常基础,并且通过允许使用JScript函数扩展XSL在MSXML中轻松解决:您可以调用JScript函数来执行某些处理,就像调用任何XSL模板一样,但我总是发现解决方案不优雅,最终创建了自己的XSL模板库。首先是因为JScript方式破坏了您的XSL可移植性,然后因为它迫使您混合编程逻辑:纯XPath / XSLT表达式中的一些位以及使用JScript的DOM /对象表示法中的其他位。
没有可更新的变量是另一个对新手来说非常混乱的限制,有些人只是没有克服这个并继续挣扎。 在一些简单的情况下,你可以使用混合的paremetrized模板和递归调用(例如实现增加或减少计数器),但让我们面对它,递归不是那么自然。
我想我听说XSLT 2.0规范中已经解决了所有这些限制,遗憾的是MS决定不实现它并改为推广XQuery。那很难过,为什么不实施这两个呢?我认为XSLT仍然很有可能变得像CSS一样受欢迎。当你想到它时,学习XSLT最困难的部分是XPath,其余的并不像理解CSS中的级联行为那么困难,CSS已经变得如此受欢迎......
所以,在我的观点中,缺少所有这里提到的小事以及在XSLT 2.0中使用它们的时间(甚至MS都没有支持它)导致了这种不受欢迎的情况。我希望MS毕竟决定实施它......
答案 3 :(得分:4)
因为大多数XSLT实现具有较高的内存占用(我认为这是由语言设计引起的),因为人们倾向于滥用XSLT来处理它并不是特别适合的各种事物以及纯粹的声明XSL的本质使得某些类型的转换非常困难。
答案 4 :(得分:4)
对于xml来说非常棒,但对于典型的编码却不是很好。它缺乏典型的基本概念(即可变变量),使得简单的东西变得非常复杂(或不可能)。它的大多数问题源于这样一个事实,即xml是一种很好的数据表示语言,但不是一种优秀的编程语言。话虽如此,我每天都会使用它,并在有意义的地方推荐它。结合外部名称空间,它可以变得更有用(调用java等)。最后,它是另一种学习的语言,许多程序员宁愿坚持使用他们习惯的东西或类似于他们习惯的东西。
答案 5 :(得分:4)
因为编写和维护使用Java,C#,JavaScript等的代码来反序列化XML流,转换它并导出所需的输出更容易,并且XSLT没有实质性的性能优势。
XSLT让事情变得简单,但它使得其他事情变得非常非常困难。
答案 6 :(得分:3)
XSL是主流并被广泛采用。你指的是其他什么语言? XSL不是一种编程语言,只是一种转换语言,所以它的范围非常有限。
答案 7 :(得分:3)
嗯......也许是因为写xslts很痛苦......几个月前我不得不写几个xslts而且我梦想着尖括号......
<Really>
<No>
<fun/>
</No>
</Really>
(我知道,这不是xslt)
答案 8 :(得分:3)
通常,您需要将XML数据转换为不同形式的XML数据但不对其进行任何其他处理的时间将非常有限。通常,XML用作两个独立系统之间的中介,其中一个系统通常是定制的,用于处理另一个系统的输出。因此,只需编写一个系统来处理另一个系统的XML输出就更简单了,而无需执行某种转换的额外步骤。
答案 9 :(得分:2)
我认为归结为XML语法可以说是很好的描述数据,但对于本质上是一种编程语言(XSLT)而言,它并不是一个很好的语法。
答案 10 :(得分:2)
如前所述,XSLT(类似JavaScript的“好部分”)是一种函数式编程语言。大多数传统程序员都讨厌这种无国籍状态。也有太多传统程序员讨厌尖括号。
但是,最重要的是,正确使用XSLT以平台无关的方式解决了Web服务器的声明性GUI生成和数据绑定问题。像微软这样的供应商没有动力去庆祝这种“不方便”的力量。
但是,我认为Microsoft拥有对世界上IDE(Visual Studio)的最佳XSLT支持。
答案 11 :(得分:1)
我认为它试图覆盖太多的用例,从而成为图灵完备(或者说我听说过)的语言。如果你尝试进行任何重要的转换,你最终会用一种丑陋且冗长的语言编写复杂的循环,条件......最好用GPL来完成。
在我看来,这种复杂性使得编写正确的XSLT实现变得困难并且限制了可用的选择,因此,在声音黑客中广泛使用,他们经常喜欢修补小而有效的代码,而不是企业代码。
答案 12 :(得分: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)"/>
不是最简单的编码方式!
答案 13 :(得分:1)
xslt非常适合xml到xml,当您拥有已经转义的数据并且输入和输出的清晰定义时。将它用于像xml2html这样的东西对我来说似乎是一件令人头疼的问题,几乎任何动态语言和css的输出都很容易实现。
答案 14 :(得分:1)
我发现它非常适合'复合Web服务架构'。有时Web服务的数量一起工作以获得最终输出。当这些Web服务需要通过XML在它们之间进行通信时,XSLT可以将xml消息从一种形式转换为另一种形式。