Query failed with dynamic error: Cannot serialize a map using this output method

Query failed with dynamic error: Cannot serialize a map using this output method

这一定是一个菜鸟问题,因为我刚刚开始使用 XQuery。我成功地为运行 XSL 转换的 eXist 构建了一个简单的 XQuery。但我未能成功为运行 XSL 转换的 Saxon (9.9.1.5J) 构建类似的 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报错是:

Query failed with dynamic error: Cannot serialize a map using this output method

我已经在 Google 和 SO 中搜索了此错误,但一无所获。我已经尝试过使用和不使用输出声明,以及在 XSL 中使用和不使用输出声明。我用 fn:transform() 和 transform() 试过了。我也加入了 fn 命名空间的声明。从 Saxon 命令行和 eXist 进行转换。所以我一定遗漏了一些关于为 fn:transform().

选项构建地图的简单内容

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

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

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

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