使用 .Net Core 3.1 运行 XSLT 2.0

Posted

技术标签:

【中文标题】使用 .Net Core 3.1 运行 XSLT 2.0【英文标题】:Run XSLT 2.0 with .Net Core 3.1 【发布时间】:2020-12-03 07:22:17 【问题描述】:

我有一个 .Net Core 3.1 应用程序和一个 XSLT 2.0 脚本。该脚本现在应该由应用程序执行。

首先我尝试过:

//Create a new XslCompiledTransform and load the compiled transformation.
        XslCompiledTransform xslt = new XslCompiledTransform();
        xslt.Load(typeof(Transform));

        // Execute the transformation and output the results to a file.
        xslt.Transform("books.xml", "discount_books.html");

但这似乎只适用于 .net 框架并且仅适用于 XSLT 1.0。

不,我找到了 Nuget-Package Saxon-HE-fixedrefs,根据描述,它应该与 .net 核心兼容。但是在编译时,我的第一行出现错误

Saxon.Api.Processor proc = new Saxon.Api.Processor();

"System.TypeInitializationException: "'net.sf.saxon.Configuration' 的类型初始化器抛出异常。"

FileNotFoundException:无法加载文件或程序集“System.Configuration.ConfigurationManager,Version=4.0.3.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51”。 "

有什么解决方法吗?

【问题讨论】:

请参阅***.com/a/58931196/252228 以获取 XmlPrime 选项,至少在技术上,您需要与他们联系以了解许可或未来版本。至于 Saxon,我不知道该 fixedrefs 项目试图修复什么,但我的理解是 .NET 上的 Saxon 依赖于为 .NET 框架开发的 IKVM,与 .NET 核心不兼容。当然,在 ASP.NET 中,应该可以编写一个 ASP.NET 框架 Web API,您的 ASP.NET Core 页面可以像使用另一个 REST API 一样使用它。 Saxon-HE-fixedrefs 最后一次发布是在 2016 年,据说可以与“.NET Core CLI 工具 1.0.0-preview2”一起使用。为什么您希望它在 4 年后与当前版本的 .NET Core 一起使用? 【参考方案1】:

您必须联系包所有者 Max Toro,以了解 Saxon-HE-fixedrefs 未按描述工作的原因。尽管包描述声称它是未经修改的 Saxonica 代码,但 Saxonica 并未分发或支持它,而且就我们 Saxonica 而言,我们认为 Saxon 不适用于 .NET Core。

我们意识到需要一个在 .NET Core 上运行的 Saxon 版本,并且正在寻求各种途径来实现这一点,但我们依赖的 IKVM 技术不支持 Core,并且原始开发人员 Jeroen Frijters不再维护它,所以我们不能做出任何承诺。

【讨论】:

请注意,Max Toro 不是nuget.org/packages/Saxon-HE-fixedrefs 的所有者,它是nuget.org/profiles/tflanitzer。在 Saxonica 正式接管之前,Max Toro 为 .NET 框架提供了 Saxon HE 的 NuGet 包。【参考方案2】:

SaxonCS EE 已发布,可与 .NET 5 和 .NET 6(RC/预览版)一起使用,这样就可以将 XSLT 3、XPath 3.1 和 XQuery 3.1 与 .NET Core 一起使用。然而,它只能在商业许可下使用,但您可以使用试用许可对其进行测试,从 Saxonica 下载的地址为 https://www.saxonica.com/download/dotnet.xml,在 NuGet 上的下载地址为 https://www.nuget.org/packages/SaxonCS/。

由于 SaxonCS 实现的 XSLT 3.0 向后兼容 XSLT 2.0,所以你想运行它应该没有问题使用 SaxonCS 来运行带有 .NET Core 的 XSLT 2.0。

【讨论】:

以上是关于使用 .Net Core 3.1 运行 XSLT 2.0的主要内容,如果未能解决你的问题,请参考以下文章

无法运行 dockerized .NET Core (3.1) API

如何使用 Visual Studio 2019 在 Docker 容器中运行 ASP.NET Core 3.1 项目?

.Net Core XSLT 转换引发异常“无效的 XML 字符”。但在 .Net Framework 上工作正常

.NET Core 3.1 项目的 SonarQube 分析失败

在 .NET Core 3.1 中使用 ImageSource?

在 .NET Core 3.1 中执行存储过程