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



输入,n=6并且字符串="n";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>

<xsl:template>

我得到的输出是

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

对于n=6和String="0",有没有一种方法可以得到下面的输出;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不是一种好的做法。

相关内容

  • 没有找到相关文章

最新更新