0

这一定是个菜鸟问题,因为我刚开始使用 XQuery。我成功地为运行 XSL 转换的 eXist 构建了一个简单的 XQuery。但是我在为 Saxon (9.9.1.5J) 构建一个运行 XSL 转换的类似 XQuery 方面没有成功。

为 eXist 工作的 XQuery:

xquery version "3.0";
transform:transform(doc("sample.xml"), doc("sample.xsl"), ())

Saxon 的 XQuery 失败:

xquery version "3.1";
transform(map{'source-node': doc('sample.xml'),'stylesheet-node':doc('sample.xsl')})

Saxon报告的错误是:

查询因动态错误而失败:无法使用此输出方法序列化地图

我已经在 Google 和 SO 中搜索过这个错误,但什么也没得到。我已经尝试过使用和不使用输出声明,以及在 XSL 中使用和不使用输出声明。我已经用 fn:transform() 和 transform() 试过了。我也为 fn 命名空间声明了一个。转换可通过 Saxon 命令行和 eXist 进行。所以我一定错过了一些关于为 fn:transform() 的选项构建地图的简单内容。

4

1 回答 1

2

fn:transform() 函数的结果是一个映射,看起来您正在以使用默认 XML 输出方法对查询结果进行序列化的方式运行查询。尝试使用 XML 输出方法序列化地图将失败。

您可以做几件事,具体取决于您想要实现的目标。最简单的解决方法可能是将查询正文更改为

transform(map{'source-node': doc('sample.xml'),'stylesheet-node':doc('sample.xsl')}) 
   ? output

在这种情况下,结果将是转换的主要结果文档,这可能是您最感兴趣的。

于 2020-05-03T21:45:29.253 回答