以下の xml ドキュメントは、2、2、および 2 の 3 つの数字を表します。ノード<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 の学習を始めたばかりで、これは再帰の演習の 1 つです。すべての数値を合計するためにプラスを再帰的に実行することもできますが、この 2 を超える数値の乗算は私の心を吹き飛ばします。やり方がわかりません。
上記の xml doc の予想される答えは 8s です (形式は無視してください) :
<s><s><s><s><s><s><s><s><zero/></s></s></s></s></s></s></s></s>
私の考えはこれでした.2つの数値を加算することで乗算を行うテンプレートを持つことができます. したがって、この 2x2x2 では、4 を返す 2 番目の 2 倍の 3 番目の 2 を実行し、最後に 2*4 を実行します。ただし、java やスキームとは異なり、呼び出しテンプレートは 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>