如何检查最后的递归步骤数并为小于 n 的递归步骤创建一个空元素?

How can I check last number of recursive step and create an empty element for the recursive step less than n?

输入, n=6 和 String = "TEST "{text1}" "{equal}" "{text2}"

我正在使用以下 xslt 代码,

<xsl:template name="SplitString">
<xsl:param name="text"/>
<xsl:param name="n"/>

<xsl:if test="$n > 0">
<xsl:element name ="P">
    <xsl:value-of select="substring-before(substring-after($text, '&quot;'), '&quot;')" />
</xsl:element>

<!--recursive call -->
<xsl:call-template name="SplitString">
    <xsl:with-param name="text" select="substring-after($text, '&quot;')" />
    <xsl:with-param name="n" select="$n - 1" />
</xsl:call-template>        
</xsl:if>

我得到的输出是,

<P>text1</P>
<P>   </P>
<P>equal</P>
<P>   </P>
<P>text2</P>
<P/>

有没有办法获得 n=6 和 String = "TEST "{text1}" "{equal}" "{text2}" 的以下输出?

<P>test1</P>
<P>equal</P>
<P>test2</P>
<P/>
<P/>
<P/>

可能是这样的:

<xsl:template name="SplitString">
    <xsl:param name="text"/>
    <xsl:param name="n"/>
    <xsl:variable name="token" select="normalize-space(substring-before(substring-after($text, '&quot;'), '&quot;'))" />
    <xsl:choose>
        <xsl:when test="$n > 0 and $token">
            <P>
                <xsl:value-of select="$token" />
            </P>
            <xsl:call-template name="SplitString">
                <xsl:with-param name="text" select="substring-after($text, '&quot;')" />
                <xsl:with-param name="n" select="$n - 1" />
            </xsl:call-template>        
        </xsl:when>
        <xsl:when test="$n > 0 and $text">
            <xsl:call-template name="SplitString">
                <xsl:with-param name="text" select="substring-after($text, '&quot;')" />
                <xsl:with-param name="n" select="$n" />
            </xsl:call-template>        
        </xsl:when>
        <xsl:when test="$n > 0">
            <P/>
            <xsl:call-template name="SplitString">
                <xsl:with-param name="n" select="$n - 1" />
            </xsl:call-template>        
        </xsl:when>
    </xsl:choose>
</xsl:template>

注意:当元素名称事先已知时,使用xsl:element不是好的做法。