下面的XML文档表示3号,2,2和2,一种节点<s>
被计数为一个数字,并用<zero/>
结束。XSLT递归乘法
<?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文档的预期的答案是787-8(忽略格式):
<s><s><s><s><s><s><s><s><zero/></s></s></s></s></s></s></s></s>
我的想法是这样的,我可以有一个模板,加入做乘法两个数。所以对于这个2x2x2,我会做第二次2次返回4的第三次2,最后做2 * 4。但是,不像java或scheme,call模板不会在xslt中返回值,所以我很欣赏任何提示/帮助。
更新: 我得到了我的答案,在打印模板中添加到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>
这似乎不是一个合适的锻炼递归 - - 为什么你不尝试一个更简单和更明确的问题?有:' > > > '并找到所有'num'元素的乘积。 –
2012-07-31 03:56:57
您对模板的评论让您听起来好像您想在XSLT 1.0中执行此操作一样。如果你真的需要使用已经取代近6年的语言版本,你应该在你的文章中这样说。那么对于我们这些对XSLT 1.0来说是一个遥远的衰落内存的人来说,不需要麻烦回答。 – 2012-07-31 08:00:53
@MichaelKay:哎哟,对于模糊评论我很抱歉。这是针对XSLT 2.0的。正如我在试图解决这个问题时想的那样大声。 – bili 2012-07-31 12:58:37