根据我的经验,当您主要处理重新排列和选择现有的 xml 元素时,XSLT 更加简洁易读。XPath 简短易懂,xml 语法避免了在代码中乱扔XElement
和XAttribute
语句。XSLT 作为一种 xml-tree转换语言工作得很好。
但是,它的字符串处理很差,循环不直观,并且没有有意义的子例程概念 - 你不能转换另一个转换的输出。
所以,如果你想真正地摆弄元素和属性内容,那么它很快就会失败。顺便说一句,使用两者都没有问题 - XSLT 规范化结构(例如,确保所有table
元素都有tbody
元素)和 linq-to-xml 来解释它。优先条件匹配的可能性意味着 XSLT 在处理许多相似但不同的匹配时更容易使用。Xslt 擅长于文档简化,但它只是缺少太多的基本功能,无法单独使用。
在全心全意地加入 Linq-to-Xml 潮流之后,我会说它与乍一看可能看起来的 XSLT 重叠较少。(而且我非常希望看到针对 .NET 的 XSLT 2.0/XQuery 1.0 实现)。
在性能方面,这两种技术都很快。事实上,由于很难表达缓慢的操作,您不太可能在 XSLT 中意外触发一个缓慢的情况(除非您开始使用递归......)。相比之下,LINQ to Xml 的强大功能也会使其变慢:只需在某个内部循环中使用任何重量级的 .NET 对象,就会出现性能问题。
无论您做什么,都不要试图通过使用 XSLT 来执行除最简单逻辑之外的任何操作来滥用 XSLT:它比等效的 C# 更冗长且可读性更差。如果您需要一堆逻辑(即使是简单的事情,比如date > DateTime.Now ? "will be" : "has"
在 XSLT 中变得臃肿的 hack)并且您不想同时使用 XSLT 和 Linq to Xml,请使用 Linq。