我们安装并运行了XSpec,并将其配置为指向样式表,从而导致错误:
错误不能在计算xsl:变量时执行xsl:结果-文档;SystemID: file:/Users/a/xspec/ce.xslt;Line#:76;Column#:114 net.sf.saxon.trans.XPathException:无法在计算xsl:变量时执行xsl:net.sf.saxon.trans.XPathException-net.sf.saxon.trans.XPathException
用户也发现了类似的错误:wasmachien,并在xsl:使用Calabash调用样式表时,结果文档指令会引发错误。上提出了一个问题。
没有给出错误的解决办法,但指出:
该错误是由管道中转换步骤之前的XSpec测试运行程序引发的(并试图将结果包装在一个变量中!)
如果我们知道如何避免这种行为,就会得到帮助。
发布于 2020-11-20 18:22:47
XSLT是一种函数式语言,因此计算变量不应该有副作用,比如创建一个输出文件。错误信息意味着你正试图造成这样的副作用。这将是个坏消息,因为副作用会阻止许多优化,因此XSLT规范禁止这样做。
我当然明白为什么这是件讨厌的事了。如果您有一些正在进行转换的代码,那么您希望能够在变量中捕获代码的结果。但关键是,如果代码有副作用,那么您就不能以这种方式封装它:实际上,代码正在产生多个结果。
我不知道是否有人致力于使XSpec能够使用fn:transform()运行XSLT转换。这将是一个理想的解决方案,因为fn:transform允许目标转换使用xsl:result-document生成多个结果,并且它使用一个映射捕获所有的结果文档。
发布于 2020-11-20 18:44:00
最终,这里的问题是,XSpec试图捕获变量中的转换输出,以便将结果与预期的结果进行比较。但是,由于Mike描述的原因,不能在变量中使用xsl:result-document。
如果没有XSpec重写来避免这种情况,您就必须扭曲样式表,这样它就不会试图在正在测试的模板中使用xsl:result-document (或者当它们被测试时)。
在对https://github.com/docbook/xslTNG/的测试中,有一些神奇之处
发布于 2020-11-23 10:31:50
正如其他人所回答的那样,这是当前XSpec实现的固有限制。您必须调整样式表以使其可测试。
galtm的纸中的“启用替换的高级文件结构”和“案例1:创建结果文档”可能会给您一些提示。它基于Saxon,但它的许多策略都适用于Saxon。
https://stackoverflow.com/questions/64933277
复制相似问题