首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在计算xsl:变量时,[ERROR]不能执行xsl:result的原因是什么?(使用XSpec)

在计算xsl:变量时,[ERROR]不能执行xsl:result的原因是什么?(使用XSpec)
EN

Stack Overflow用户
提问于 2020-11-20 16:34:05
回答 3查看 242关注 0票数 1

我们安装并运行了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测试运行程序引发的(并试图将结果包装在一个变量中!)

如果我们知道如何避免这种行为,就会得到帮助。

EN

回答 3

Stack Overflow用户

发布于 2020-11-20 18:22:47

XSLT是一种函数式语言,因此计算变量不应该有副作用,比如创建一个输出文件。错误信息意味着你正试图造成这样的副作用。这将是个坏消息,因为副作用会阻止许多优化,因此XSLT规范禁止这样做。

我当然明白为什么这是件讨厌的事了。如果您有一些正在进行转换的代码,那么您希望能够在变量中捕获代码的结果。但关键是,如果代码有副作用,那么您就不能以这种方式封装它:实际上,代码正在产生多个结果。

我不知道是否有人致力于使XSpec能够使用fn:transform()运行XSLT转换。这将是一个理想的解决方案,因为fn:transform允许目标转换使用xsl:result-document生成多个结果,并且它使用一个映射捕获所有的结果文档。

票数 1
EN

Stack Overflow用户

发布于 2020-11-20 18:44:00

最终,这里的问题是,XSpec试图捕获变量中的转换输出,以便将结果与预期的结果进行比较。但是,由于Mike描述的原因,不能在变量中使用xsl:result-document

如果没有XSpec重写来避免这种情况,您就必须扭曲样式表,这样它就不会试图在正在测试的模板中使用xsl:result-document (或者当它们被测试时)。

在对https://github.com/docbook/xslTNG/的测试中,有一些神奇之处

票数 0
EN

Stack Overflow用户

发布于 2020-11-23 10:31:50

正如其他人所回答的那样,这是当前XSpec实现的固有限制。您必须调整样式表以使其可测试。

galtm的中的“启用替换的高级文件结构”和“案例1:创建结果文档”可能会给您一些提示。它基于Saxon,但它的许多策略都适用于Saxon。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64933277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档