如何检查最后的递归步骤数并为小于 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, '"'), '"')" />
</xsl:element>
<!--recursive call -->
<xsl:call-template name="SplitString">
<xsl:with-param name="text" select="substring-after($text, '"')" />
<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, '"'), '"'))" />
<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, '"')" />
<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, '"')" />
<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
不是好的做法。
输入, 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, '"'), '"')" />
</xsl:element>
<!--recursive call -->
<xsl:call-template name="SplitString">
<xsl:with-param name="text" select="substring-after($text, '"')" />
<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, '"'), '"'))" />
<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, '"')" />
<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, '"')" />
<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
不是好的做法。