输入,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, '"'), '"')" />
</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>
<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, '"'), '"'))" />
<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
不是一种好的做法。