gpt4 book ai didi

xslt - 如何计算 XSLT 中模板的调用?

转载 作者:行者123 更新时间:2023-12-04 16:49:31 29 4
gpt4 key购买 nike

我有一个 XSLT 脚本,我想在每次调用模板时按顺序编号。所以它的一个非常简化的版本看起来有点像:

<xsl:call-template name="insertHeader" />
<xsl:for-each ...>
<xsl:call-template name="insertHeader" />
...
</xsl:for-each>
<xsl:call-template name="insertHeader" />

<xsl:template name="insertHeader>
This is item number <xsl:value-of select="$numberOfInvocations />
</xsl:template>

很明显 $numberOfInvocations 的事情不起作用,并且在 XSLT 中你不能增加一个全局计数器变量,这在过程语言中似乎是一种明显的方法。我希望它在第一次调用该模板时打印 1,第二次打印 2,等等。我应该怎么做?这在 XSLT 中甚至是远程可能的吗?

谢谢 :)

编辑:所以有一些评论认为这定义不够明确。我想要做的是在(HTML)输出中标记一系列表格。我看到的最明显的方法是调用一个函数(您可能会说我不是这里的 XSLT 向导),该函数每次都会自动增加数字。我认为这看起来如此困难的原因是 XSLT 本身定义了这些表出现的位置,而不是输入。

不过,这些额外的信息可能没有多大用处,因为 Dimitre 的回答听起来像是永远不会奏效。不管怎么说,还是要谢谢你 :)

最佳答案

在像 XSLT 这样的函数式语言中,没有定义“计算顺序” .

因此,尝试按“时间”的顺序对“计算”进行编号是没有意义的,如果尝试通常会产生令人惊讶的结果。

例如 ,没有任何限制<xsl:apply-templates>以与所选节点列表中节点的文档顺序相同的时间顺序应用模板。这些可以并行完成,意味着以任何顺序。

许多 XSLT 处理器执行 lazy evaluation这意味着某个 XSLT 指令只会在真正需要时才会被评估,而不是根据它在 XSLT 样式表中的文本顺序。通常一些指令根本不执行。

有时优化器会执行给定的 XSLT 指令 两次,因为它决定丢弃第一个结果以优化空间利用率。

可以生成请求的编号使用递归(通常)和连续传递风格的 CPS 或 Monads(更具体地说)。

FXSL 库 (版本 1——用于 XSLT 1.0 和版本 2——用于 XSLT 2.0)包含可用于组织此类编号的模板:foldl、foldr、iter、iterUntil、scanl、scanr、...等。

每当问题被精确定义时(这不是当前的情况),可以生成这样的编号,但会警告结果 .

关于xslt - 如何计算 XSLT 中模板的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3663349/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com