XSLT如何统计Parameter元素创建次数并补足至指定n个
解决方案
修改思路
- 给原
Split模板新增两个参数:targetCount(指定需要生成的Parameter总数量,即你提到的n)、currentCount(记录当前已生成的Parameter数量,默认初始值为0) - 每次拆分出有效内容生成Parameter后,将
currentCount自增1传入下一层递归 - 字符串拆分完成后判断已生成数量是否小于目标总数,若不足则递归生成空Parameter,直到达到目标数量
- 修正原代码中元素名拼写错误:
Paramter改为Parameter
代码实现
调用示例(以n=9为例)
<xsl:call-template name="Split"> <xsl:with-param name="text" select="concat('Set string "', attribute, '" value "', stringValue, '"')" /> <xsl:with-param name="targetCount" select="9" /> </xsl:call-template>
修改后的Split模板
<xsl:template name="Split"> <xsl:param name="text" select="''" /> <!-- 目标生成Parameter总数量 --> <xsl:param name="targetCount" select="0" /> <!-- 当前已生成Parameter数量,初始默认0 --> <xsl:param name="currentCount" select="0" /> <xsl:variable name="tag" select="substring-before(substring-after($text, '"'), '"')" /> <xsl:variable name="tail" select="substring-after($text, '"')" /> <xsl:choose> <!-- 存在可拆分的有效内容 --> <xsl:when test="$tag != ''"> <Parameter> <xsl:value-of select="$tag"/> </Parameter> <!-- 递归处理剩余字符串,已计数+1 --> <xsl:call-template name="Split"> <xsl:with-param name="text" select="$tail" /> <xsl:with-param name="targetCount" select="$targetCount" /> <xsl:with-param name="currentCount" select="$currentCount + 1" /> </xsl:call-template> </xsl:when> <!-- 字符串拆分完成,不足目标数则补空Parameter --> <xsl:when test="$currentCount < $targetCount"> <Parameter></Parameter> <!-- 递归补全,已计数+1 --> <xsl:call-template name="Split"> <xsl:with-param name="text" select="''" /> <xsl:with-param name="targetCount" select="$targetCount" /> <xsl:with-param name="currentCount" select="$currentCount + 1" /> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:template>
补充说明
如果需要严格限制最多生成targetCount个Parameter(拆分出的有效内容数量超过目标数时做截断),只需要在生成带值Parameter的逻辑前增加$currentCount < $targetCount的判断即可。
内容的提问来源于stack exchange,提问作者Kaya Choudhary
相关产品推荐
相关产品推荐

