如何检查元素创建了多少次并创建了 n 次
How can I check how many times an element was created and create it n number of times
我想创建一个元素(参数)n 次。我使用以下方法创建了一个元素“Parameter”,其中包含来自 Split 模板的值。每个递归创建元素“Parameter”。我如何检查元素“Parameter”创建了多少次,如果它小于 n 那么我如何在没有值的情况下创建它 n 次。
<xsl:call-template name="Split">
<xsl:with-param name="text" select="Set string "{attribute}" value "{stringValue}"" />
</xsl:call-template>
<xsl:template name="Split">
<xsl:param name="text" select="''" />
<xsl:variable name="tag" select="substring-before(substring-after($text, '"'), '"')" />
<xsl:variable name="tail" select="substring-after($text, '"')" />
<xsl:choose>
<xsl:when test="$tag != ''">
<xsl:element name = "Paramter">
<xsl:value-of select = "$tag"/>
</xsl:element>
<!--recursive step start: process the remainder of the string -->
<xsl:call-template name="Split">
<xsl:with-param name="text" select="$tail" />
</xsl:call-template>
<!--recursive step end: process the remainder of the string -->
</xsl:when>
</xsl:choose>
</xsl:template>
输出(对于 n=9)应该是这样的,
<Parameter>attribute</Parameter>
<Parameter>value</Parameter>
<Parameter>StringValue</Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
如果你这样调用模板:
<xsl:call-template name="Split">
<xsl:with-param name="text" select="'Set string "{attribute}" value "{stringValue}"'" />
<xsl:with-param name="n" select="9" />
</xsl:call-template>
并调整为:
<xsl:template name="Split">
<xsl:param name="text"/>
<xsl:param name="n"/>
<xsl:if test="$n > 0">
<Parameter>
<xsl:value-of select="substring-before(substring-after($text, '"'), '"')" />
</Parameter>
<!--recursive call -->
<xsl:call-template name="Split">
<xsl:with-param name="text" select="substring-after($text, '"')" />
<xsl:with-param name="n" select="$n - 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
那么结果就是:
<Parameter>{attribute}</Parameter>
<Parameter> value </Parameter>
<Parameter>{stringValue}</Parameter>
<Parameter/>
<Parameter/>
<Parameter/>
<Parameter/>
<Parameter/>
<Parameter/>
请注意,这会在 9 次迭代后退出。如果字符串有 9 个以上的标记,输出中只会出现前 9 个。
我想创建一个元素(参数)n 次。我使用以下方法创建了一个元素“Parameter”,其中包含来自 Split 模板的值。每个递归创建元素“Parameter”。我如何检查元素“Parameter”创建了多少次,如果它小于 n 那么我如何在没有值的情况下创建它 n 次。
<xsl:call-template name="Split">
<xsl:with-param name="text" select="Set string "{attribute}" value "{stringValue}"" />
</xsl:call-template>
<xsl:template name="Split">
<xsl:param name="text" select="''" />
<xsl:variable name="tag" select="substring-before(substring-after($text, '"'), '"')" />
<xsl:variable name="tail" select="substring-after($text, '"')" />
<xsl:choose>
<xsl:when test="$tag != ''">
<xsl:element name = "Paramter">
<xsl:value-of select = "$tag"/>
</xsl:element>
<!--recursive step start: process the remainder of the string -->
<xsl:call-template name="Split">
<xsl:with-param name="text" select="$tail" />
</xsl:call-template>
<!--recursive step end: process the remainder of the string -->
</xsl:when>
</xsl:choose>
</xsl:template>
输出(对于 n=9)应该是这样的,
<Parameter>attribute</Parameter>
<Parameter>value</Parameter>
<Parameter>StringValue</Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
<Parameter></Parameter>
如果你这样调用模板:
<xsl:call-template name="Split">
<xsl:with-param name="text" select="'Set string "{attribute}" value "{stringValue}"'" />
<xsl:with-param name="n" select="9" />
</xsl:call-template>
并调整为:
<xsl:template name="Split">
<xsl:param name="text"/>
<xsl:param name="n"/>
<xsl:if test="$n > 0">
<Parameter>
<xsl:value-of select="substring-before(substring-after($text, '"'), '"')" />
</Parameter>
<!--recursive call -->
<xsl:call-template name="Split">
<xsl:with-param name="text" select="substring-after($text, '"')" />
<xsl:with-param name="n" select="$n - 1" />
</xsl:call-template>
</xsl:if>
</xsl:template>
那么结果就是:
<Parameter>{attribute}</Parameter>
<Parameter> value </Parameter>
<Parameter>{stringValue}</Parameter>
<Parameter/>
<Parameter/>
<Parameter/>
<Parameter/>
<Parameter/>
<Parameter/>
请注意,这会在 9 次迭代后退出。如果字符串有 9 个以上的标记,输出中只会出现前 9 个。