我至今仍在继续开发它(实际上我现在应该在工作,而不是在SO上打游戏),我看到越来越多的东西使我认为放弃XSLT是一个明智的决定。
我知道XSLT有其存在的意义,因为它是一个被广泛接受的标准,如果每个人都在编写自己的解析器,其中90%的人最终会出现在TheDailyWTF上。但是,考虑到它是一个函数式语言,而不是大多数程序员熟悉的过程式语言,对于像我这样开始类似项目的人,你会推荐他们走我选择的道路,还是坚持使用XSLT?
XSLT很难使用,但一旦掌握它,您将对DOM和模式有非常深入的了解。如果您还了解XPath,那么您就在学习函数式编程的路上了,这将向您展示解决问题的新技术和方法。在某些情况下,连续转换比过程化解决方案更强大。
我广泛使用XSLT,用于自定义MVC风格的前端。模型通过XML(不是通过XML序列化)“序列化”,然后通过XSLT转换为HTML。与ASP.NET相比,优势在于与XPath的自然集成以及更严格的格式要求(在XSLT中比大多数其他语言更容易推理文档结构)。
不幸的是,该语言包含几个限制(例如,无法转换另一个转换的输出),这意味着有时会让人感到沮丧。
尽管如此,它提供的易于实现、强制执行的关注点分离是我目前没有看到其他技术能够提供的 - 因此对于文档转换,它仍然是我推荐的东西。
我曾认为XSLT是个好主意。我的意思是,它确实是个好主意。
但它的执行却失败了。
随着时间的推移,我发现编程语言在XML中只是一个糟糕的想法。它使整个过程变得晦涩难懂。具体来说,我认为XSLT非常难学、难编码和难理解。在功能方面加上XML只会让整个过程更加混乱。在我的职业生涯中,我尝试过5次去学习它,但它就是不灵。
好吧,你可以“工具化”它——我认为这部分是它设计的一部分——但这是第二个失败:市场上所有的XSLT工具都很简单... 烂!
XSLT规范将XSLT定义为“一种将XML文档转换为其他XML文档的语言”。如果您想在XSLT中进行除最基本数据处理之外的任何操作,可能有更好的解决方案。
值得注意的是,可以使用自定义扩展函数在.NET中扩展XSLT的数据处理能力:
我仍然相信XSLT可以很有用,但它是一种丑陋的语言,可能会导致难以阅读、难以维护的混乱。这部分原因在于XML不够人类可读,无法构成“语言”,另一部分原因则在于XSLT处于声明性和过程性之间的某个位置。话虽如此,我认为可以将其与正则表达式进行比较,在处理简单而明确定义的问题时有其用途。
使用替代方法并在代码中解析XML同样麻烦,您真的希望采用某种XML marshalling/binding技术(例如Java中的JiBX),将您的XML直接转换为对象。