LINQ到XML是否取代了XSLT?

LINQ到XML是否取代了XSLT?,xslt,linq-to-xml,Xslt,Linq To Xml,有什么是你能做的而不是你能做的吗?学习XSLT仍然重要吗?你什么时候会选择一个而不是另一个呢?对于没有使用.NET的人来说,学习XSLT肯定仍然很重要。LINQtoXML很棒,但它的用途仅限于.NET应用程序 XSLT可以跨语言和平台应用……甚至浏览器也可以使用XML并应用XSLT来生成输出 不要忘记,某些.NET应用程序API(例如CMS系统)仍然需要您提供XSLT来将内部XML转换为输出。在我看来,忽视所有这些技术将是一个真正的错误 在XSLT中有什么是在LINQtoXML中做不到的吗 不,

有什么是你能做的而不是你能做的吗?学习XSLT仍然重要吗?你什么时候会选择一个而不是另一个呢?

对于没有使用.NET的人来说,学习XSLT肯定仍然很重要。LINQtoXML很棒,但它的用途仅限于.NET应用程序

XSLT可以跨语言和平台应用……甚至浏览器也可以使用XML并应用XSLT来生成输出

不要忘记,某些.NET应用程序API(例如CMS系统)仍然需要您提供XSLT来将内部XML转换为输出。在我看来,忽视所有这些技术将是一个真正的错误

在XSLT中有什么是在LINQtoXML中做不到的吗

不,因为LINQ to XML是图灵完整编程语言使用的API,它比XSLT文档模型涵盖了更多的XML信息集(例如,您可以完全控制L2X中文本和CDATA节点之间的差异)

学习XSLT仍然重要吗

取决于你在做什么。大体上说,是的

你什么时候会选择一个而不是另一个

当您需要进行转换时,XSLT通常会更好—即输入和输出都是XML。原因有很多。首先,XSLT模式匹配在L2X查询中通常比嵌套的
?:
更简洁,可读性也更高。您还可以使用
*
非常有效地设置默认规则(如“复制所有内容”或“处理子项但不生成输出”),然后为需要以特殊方式处理的特定节点添加规则-因此您不需要像在L2X中经常做的那样,为文档中的每个节点级别编写显式循环/理解。最后,XPath也比L2X查询更简洁(至少在C#中是这样),因此如果您进行大量非平凡的查询,它在XSLT中可能会短得多,可读性也更高

当您需要快速查询文档中的某个值或节点时,L2X通常会更好。这里的主要优点是运行时开销较小(XPath需要解析,L2X查询不需要解析),而且您不需要处理
XmlNamespaceManager
和其他问题-API对于编写单表达式查询进行了优化。同样,使用嵌套的
from
循环和
let
使它更接近XQuery领域


当您需要对文档进行就地更新时,L2X也是唯一的选择,当您只需要替换文档中的一些值时,L2X可能会更好,就地更新是一个选项,因为XSLT不允许您以任何方式接触输入。

微软拒绝在框架中提供XQuery处理器,这是一个遗憾。因为当你想要一个模板引擎时,你真的不可能想出比XSLT更糟糕的工具。从个人使用两者的经验来看,XSLT在转换方面仍然比XQuery好——后者的主要问题是缺少任何与模板模式匹配等价的工具。不过,它确实很适合查询。