如何检查递归步骤的最后一个数并为小于 n 的递归步骤创建一个空元素?
Posted
技术标签:
【中文标题】如何检查递归步骤的最后一个数并为小于 n 的递归步骤创建一个空元素?【英文标题】:How can I check last number of recursive step and create an empty element for the recursive step less than n? 【发布时间】:2021-12-19 10:22:53 【问题描述】:输入, 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/>
【问题讨论】:
您的声明String = "TEST "text1" "equal" "text2"
令人困惑,因为不清楚哪些引号是字符串本身的一部分。如果第一个引号是字符串的一部分,那么你得到的结果就不是你显示的结果。
【参考方案1】:
可能是这样的:
<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 的递归步骤创建一个空元素?的主要内容,如果未能解决你的问题,请参考以下文章