如果您没有丰富的技术经验,则很难评估技术,但是当然,这恰恰是您必须做出决定时所用的,因此,对于这一难题,没有简单的答案。
您列举了两个问题:性能和可用性。我会在下面同时解决。
首先,性能。当然,性能不仅取决于语言,还取决于实现方式以及用户的专业知识。不同的XSLT处理器的性能差异很大,而同一处理器的使用方式也可能差异很大(例如,对于Saxon,经常遇到性能问题的人将其与DOM一起使用,这是一个很差的组合) ,如果改用Saxon的本地树模型,性能可以提高十倍)。因此,第一个建议是不要对传闻进行考核,而要对其进行衡量。第二个建议是确保进行测量的人员具有足够的经验,不要犯愚蠢的错误。说起来容易做起来难。
可以粗略地将转换作业分为两类:简单和复杂。对于简单的转换,使用好的XSLT处理器,所有的时间都花在了解析和序列化上,而XSLT的处理时间几乎没有花时间。由于任何其他技术都将产生相同的解析和序列化成本,因此转换技术的选择不会产生太大的变化(除了非常非常低的使用流编码的编码,但没有多少人负担得起编程的费用)实施所需的时间和技能)。对于大型文档的复杂转换,您开始遇到与SQL编程相同的问题:要获得良好的性能,就需要程序员的技能和知识以及优化程序的功能之间进行良好的交互。与SQL一样,用这种高级语言编写一些简单的语句非常容易,这导致处理器不得不做大量的工作。而且与SQL一样,知道自己在做什么的程序员会比新手做得更好。
第二,可用性。XSLT的基于XML的语法在许多初次接触该语言的人中是非常讨厌的。但是这样做有充分的理由和真正的好处:有一个“模板”参数,很多代码都包含要写入结果文档中的XML,而编写XML的最佳方法是使用XML。还有“反射”的论点。在大型复杂系统中,通常会找到生成样式表的样式表。然后是“工具”参数;如果您在XML商店中,则可能有很多XML工具,例如语法导向的编辑器,并且能够使用相同的工具来处理您的程序和数据是很好的。相比之下,这些缺点显得很漂亮:编辑中涉及的击键次数(使用好的编辑工具即可轻松解决),并且代码过于冗长(降低了可读性)。通过引入诸如正则表达式和样式表功能之类的功能,XSLT 2.0中的冗长性已大大降低:当许多样式表充分利用XSLT 2.0时,它们的大小将减小为一半或三分之一。
您对DSSSL的提及使我面带微笑。我从来没有使用过DSSSL,但是我听到的故事是它不成功,因为它的语法很神秘,并且与数据(SGML)的语法无关。DSS的使用经验强烈推动了XSLT使用XML语法。
有些人喜欢XSLT,有些人讨厌它。毫不奇怪,经常使用它的人往往属于第一类。那些不喜欢它的人通常是那些还没有学会“思考XSLT方式”的人。您可能会争辩说,编程语言不应该影响您的思维方式,但是会影响:使用基于规则的语言编写的代码与使用命令式语言编写的代码具有不同的思维方式。许多程序员的第一反应是他们感觉不到控制权(描述问题,而不是告诉计算机逐步执行的操作)。这与您第一次向人们介绍SQL时曾经看到的反应非常相似。如今,人们在职业生涯中较早地学习SQL,因此不需要进行精神上的调整。
最终,您应该基于客观的可衡量标准而不是基于爱/恨反应来选择一种技术。进行这些测量很困难。但是有很多人非常密集且非常成功地使用XSLT,因此毫无疑问可以做到这一点。