XSL 每次 sum 等于 12 时添加一个包装器 [英] XSL add a wrapper every time sum equals 12
本文介绍了XSL 每次 sum 等于 12 时添加一个包装器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想转这个
<root>
<item columns="4"></item>
<item columns="8"></item>
<item columns="12"></item>
<item columns="4"></item>
<item columns="4"></item>
<item columns="4"></item>
<item columns="2"></item>
<item columns="10"></item>
</root>
进入这个
<root>
<row>
<item columns="4"></item>
<item columns="8"></item>
</row>
<row>
<item columns="12"></item>
</row>
<row>
<item columns="4"></item>
<item columns="4"></item>
<item columns="4"></item>
</row>
<row>
<item columns="2"></item>
<item columns="10"></item>
</row>
</root>
推荐答案
您可以通过以下方式查看:
Here's one way you could look at it:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/root">
<xsl:copy>
<xsl:call-template name="aggregate">
<xsl:with-param name="items" select="item"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="aggregate">
<xsl:param name="items" select="/.."/>
<xsl:param name="i" select="1"/>
<xsl:variable name="stack-items" select="$items[position() <= $i]" />
<xsl:choose>
<xsl:when test="sum($stack-items/@columns) >= 12 or $i >= count($items)">
<row>
<xsl:copy-of select="$stack-items"/>
</row>
<xsl:if test="$i < count($items)">
<xsl:call-template name="aggregate">
<xsl:with-param name="items" select="$items[position() > $i]"/>
</xsl:call-template>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="aggregate">
<xsl:with-param name="items" select="$items"/>
<xsl:with-param name="i" select="$i + 1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
<小时>
搜索兄弟递归以寻找替代方法.
这篇关于XSL 每次 sum 等于 12 时添加一个包装器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文