能否在Saxon/XSLT3中禁用主输出文件的输出?

能否在Saxon/XSLT3中禁用主输出文件的输出?,xslt,saxon,xslt-3.0,Xslt,Saxon,Xslt 3.0,我使用Saxon中提供的XSLT3将单个输入XML文件转换为一组输出文件。所有这些输出文件在概念上是等效的。每个输出文件都是通过结果文档指令声明的,如中所述 在本例中,我不需要任何主输出,但Saxon仍在创建这样的输出文件。在XSLT3或Saxon中是否有可能禁用主输出 我可以使用结果文档来处理所有需要的输出文件,除了最后一个文件,然后只使用主输出文件——但这感觉很奇怪。这是一个好问题。XSLT2.0有一个非常复杂的规则(在§2.4中):如果在转换过程中没有对xsl:result文档指令进行求值

我使用Saxon中提供的XSLT3将单个输入XML文件转换为一组输出文件。所有这些输出文件在概念上是等效的。每个输出文件都是通过
结果文档
指令声明的,如中所述

在本例中,我不需要任何主输出,但Saxon仍在创建这样的输出文件。在XSLT3或Saxon中是否有可能禁用主输出


我可以使用
结果文档
来处理所有需要的输出文件,除了最后一个文件,然后只使用主输出文件——但这感觉很奇怪。

这是一个好问题。XSLT2.0有一个非常复杂的规则(在§2.4中):如果在转换过程中没有对xsl:result文档指令进行求值,则当结果序列为空时也会创建一个隐式结果树。在这种情况下,隐式结果树将由一个没有子节点的文档节点组成

将“创建结果树”解释为将相应的序列化输出文件写入filestore,这意味着当主结果树为空时,仅当不存在辅助输出文件时,才会写入相应的输出文件。这就是(我认为)你所要求的效果

在XSLT 3.0中,由于调用样式表的方式(例如通过调用初始公共函数)大大扩展,该规则变得越来越笨拙,因此被删除;撒克逊人也效仿了


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

如何使用Saxon,向我们展示您的命令行或(Java?/.NET?)代码。最小的XSLT代码看起来如何,样式表是否在不使用
xsl:result-document
的模板中生成任何输出?我想对于放弃主要输出来说,提及
NullDestination
()也没有什么坏处。至于命令行,我想这取决于操作系统和shell,建议在Windows命令中使用
NUL
NUL:
作为一种
/dev/null
设备。是的,我忘记了
NullDestination
。发送到
/dev/null
的问题是,主输出的基本URI用于解析
xsl:result文档中的相对URI