下面的xml文档代表3个数字,2、2和2。一个节点<s>
算作一个数字,以.结尾<zero/>
。
<?xml version="1.0" encoding="UTF-8"?>
<nat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="nat.xsd">
<s>
<s>
<zero/>
</s>
</s>
<s>
<s>
<zero/>
</s>
</s>
<s>
<s>
<zero/>
</s>
</s>
</nat>
我刚开始学习 xslt,这是递归练习之一。我可以递归地加上所有数字,但是这个乘以两个以上的数字让我大吃一惊。我不知道该怎么做。
上述 xml 文档的预期答案是 8s(忽略格式):
<s><s><s><s><s><s><s><s><zero/></s></s></s></s></s></s></s></s>
我的想法是这样的,我可以有一个模板通过相加来对两个数字进行乘法运算。所以对于这个 2x2x2,我会做第 2 次 2 次第 3 次 2 返回 4,最后做 2*4。但是调用模板不会在 xslt 中返回值,这与 java 或方案不同,所以我感谢任何提示/帮助。
更新: 我通过在 Dimitre 的答案中添加打印模板得到了答案。这里是:
<xsl:template name="print">
<xsl:param name="pAccum"/>
<xsl:choose>
<xsl:when test="$pAccum > 0">
<s>
<xsl:call-template name="print">
<xsl:with-param name="pAccum" select="$pAccum - 1"/>
</xsl:call-template>
</s>
</xsl:when>
<xsl:otherwise>
<zero/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>