下面的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