ChatGPT解决这个技术问题 Extra ChatGPT

.NET 的 XPath 和 XSLT 2.0? [关闭]

关闭。这个问题是题外话。它目前不接受答案。想改进这个问题?更新问题,使其成为 Stack Overflow 的主题。 9年前关闭。改进这个问题

.NET 3.5 不完全支持 XPATH 2.0 或 XSLT 2.0,这太糟糕了。有谁知道这两个是否会在任何未来的 .NET 版本中包含并完全支持?

codeproject.com/Articles/24766/… Java saxon 库实现 XSL 2.0 和 XQuery 1.0。使用 IKVM 和 GNU Classpath,您可以在 .NET 中访问此库。但是,使用 Saxon 的接口与您在 .NET 中使用的接口非常不同。从这篇文章页面,您可以下载接口适配器,它们有助于弥合 Saxon 接口和 .NET XslCompiledTransform 之间的差距。这反过来又使得将代码从使用 .NET XSL 1.0 移植到 Saxon XSL 2.0 变得更加容易。
您可以通过 Microsoft 在 uservoice 发布此功能请求

M
Max Toro

我认为他们不会很快添加对 XPath 2.0 或 XSLT 2.0 的支持。

但是,如果这些不是 BCL 的一部分,您不应该感到难过,只要您有可用的 3rd 方实现:

撒克逊:XPath 3.1、XQuery 3.1、XSLT 3.0

XmlPrime:XPath 3.1、XQuery 3.1、XSLT 2.0

查询机器:XPath 2.0、XQuery 1.0

.NET 的轻量级 XPath2:XPath 2.0

扩展:XSLT 3.0

微软以客户为导向。如果客户不想要它,他们就不会成功。

2009-11-18:我联系了 XML 团队 here 并得到了以下回复:

虽然 XML 继续成为我们平台未来的关键部分,但我们决定此时不追求 XSLT 2.0 实现。如果您正在尝试完成某个特定的 XSLT 任务并且在使用 XSLT 1.0 时遇到困难,请告诉我们,我们将尽最大努力提供帮助。

此列表现在保存在 github.com/maxtoroq/dotnet-xml


他们最初承诺实施——这就是为什么只有很少实施的原因,因为当像微软这样的大公司说我们会这样做并且我们将把它作为 Windows 的一部分提供给每个人时,没有理由对其进行编程。但随后 MS 在 XML 团队中失去了几个关键人物,从那时起 2.0 支持就消失了。
这个答案看起来非常熟悉——几年前我问了一个类似的问题,得到了同样的答案。 Shame - XSLT 2.0 看起来像是对语言可用性的一个相当重要的改进。
真正的问题是,这些第 3 方选项都没有更新为在 .NET Standard/Core 上运行——其中有几个是基于 JKVM 的,这意味着它们无法更新。考虑到您在那里链接了多少第三方商业产品,我不确定“以客户为导向”这一行是否能解释任何事情。
如果他们真正以客户为导向,他们就会这样做。这是他们的 UserVoice 中最受好评的问题之一。每个人都在乞求它。 XSLT 不是小众市场,它在大多数信息系统课程中都有讲授。它是一种基本的数据交换格式。
仅供参考:.Net 核心功能请求:github.com/dotnet/corefx/issues/2295 用于 XPath/XSLT v2 和3 支持。
D
David Basarab

看到这个blog post

我们没有实现 XSLT 2.0 和 XPath 2.0 的原因有很多。实现所有 3 种技术(XQuery、XSLT 2.0 和 XPath 2.0)需要花费大量的精力和资源。我们的指导原则是,我们相信创建大量 XML 查询技术会使最终用户感到困惑。除了 .NET Framework 中已经存在的 XPath 1.0 和 XSLT 1.0 之外,我们宁愿实现一种我们推动人们学习的语言,也不愿支持和解释另外三种 XML 查询和转换语言。我们的客户和支持人员必须处理 3 种复杂的 XML 查询语言的复杂性,其中两种在 XPath 2.0 中看起来相似但行为却截然不同,而 XQuery 在我们看来并没有那么有益。


这是 5 年前的一篇博客,标题为“为什么在 .NET 框架的下一个版本中你不会看到 XSLT 2.0 或 XPath 2.0”(我的重点)
谢谢!没注意到!再次不接受这个答案,希望有更新的解释。 (虽然这是一个很好的解释,所以 +1 仍然存在。)
也就是说,在 .NET 中处理 XSLT 时有两点值得牢记:1) 它支持 exslt:node-set(),它涵盖了 XSLT 2.0 的一大优势,以及 2) msxsl:script 让您使用 C#/VB/JScript.NET 直接在 XSLT 中定义任意复杂的函数,而无需使用可扩展性 API。由于 XslCompiledTransform 使用 XPathNavigator 表示节点,而后者完全实现了 XDM,因此您实际上可以在此之上将所有 XPath2 功能(如运算符 <<>>)实现为自定义函数。
这不是关于该主题的最后一次交流。例如:blogs.msdn.com/xmlteam/archive/2007/01/29/xslt-2-0.aspx
2013,没有变化:(
p
pgfearo

我的理解是,许多 Microsoft XML 资源从 XSLT 2.0 转移到 LINQ to XML,在我看来,这根本没有解决与 XSLT 相同的问题空间。

LINQ to XSD 应该增强 LINQ to XML(以及 XML Schema 的好处,语法不那么难看),但这是微软前段时间在 CodePlex 上开源的,似乎没有社区支持。

此外,如果没有将 XSLT 2.0 编辑器和调试器集成到 Visual Studio 中,Microsoft 不太可能推出新的 XSLT 2.0 处理器,因此需要相当多的努力/时间来扭转他们的“不采用”决定。 [更新] 现在有一个与 Saxon 的 3.0 XSLT 处理器集成的XSLT 3.0 extension for Microsoft VSCode (由我自己管理)

因此,我们使用了 Saxon.NET,它在标准合规性方面享有无可挑剔的声誉,并为 .NET 提供了出色的可扩展性选项。


O
Oliver Hallam

Microsoft 没有计划在 .NET 中发布对 XPath/XSLT 2.0 的支持。

XQSharp 为 .NET 提供 XPath 2.0、XSLT 2.0 和 XQuery 的第 3 方实现。

[编辑:XQSharp 2.0 beta(带有 XSLT 2.0)已经发布]


@Oliver-Hallam:这个预测还有效吗?你走上正轨了吗?
@Oliver-Hallam:XQSharp-XSLT 2.0 会比 Saxon.NET 快吗?
@Dimitre-Novaatchev - 你现在问很有趣;我们应该会在接下来的几个小时内发布 XSLT 实现的 beta 版本!至于速度,我们相信我们的表现与撒克逊人一样好,尽管我们有偏见,所以我们希望有独立的意见!
XQSharp 现在称为 XMLPrime
B
Brian Agnew

我不敢相信它们不会处于某个阶段,因为它们是 W3C 的核心技术。但是我找不到对这些的任何当前参考(只有很久以前发布的信息)。

在不久的将来,您应该看看支持您需要的 Xpath/XSLT 版本的 Saxon


我会改用 AltovaXML:altova.com/altovaxml.html 它是免费的,并且通过 COM 支持 Java、.NET 和 WIN32。只是我希望 .NET 能够原生支持它。
AltovaXML API 是无用的,加上它是本机代码,而 Saxon 是托管的。
Altova 的大问题是他们拒绝正确实现仅保留文本节点的空白。