您可以在 Saxon/XSLT3 中禁用主输出文件的输出吗?

Can you disable output of the main output file in Saxon/XSLT3?

我正在使用 Saxon 中提供的 XSLT3 将单个输入 XML 文件转换为一组输出文件。所有这些输出文件在概念上都是等价的。每个输出文件都通过 result-document 指令声明,如 https://www.w3.org/TR/2007/REC-xslt20-20070123/#element-result-document.

中所述

在这种情况下,我不需要任何 main 输出,但 Saxon 仍在创建此类输出文件。是否可以通过某种方式禁用 XSLT3 或 Saxon 中的 main 输出?

我可以对所有需要的输出文件使用 result-document,除了最后一个,并且只对那个文件使用 main 输出——但这感觉很奇怪。

这是个好问题。 XSLT 2.0 有一个非常复杂的规则(在 §2.4 中):如果在转换过程中没有评估 xsl:result-document 指令,那么当结果序列为空时也会创建一个隐式结果树。在这种情况下,隐式结果树将包含一个没有子节点的文档节点。

解释"creating a result tree"的意思是将对应的序列化输出文件写入filestore,意思是当主结果树为空时,当且仅当没有次输出时才写入对应的输出文件文件。这就是(我认为)您要求的效果。

这条规则在 XSLT 3.0 中变得越来越笨拙,因为调用样式表的方式大大扩展(例如,通过调用初始 public 函数),因此被删除;撒克逊人紧随其后。

您当然可以通过提供丢弃文件的结果或目的地而不是将其写入文件存储(例如,在 s9api 中,XdmDestination)来避免写入文件。从命令行实现同样的事情并不容易;事实上,如果不在某处编写一些 Java 或 C# 代码,我不确定它是否可以完成。