中国开发网: 论坛: 程序员情感CBD: 贴子 16272
pinxue: 终于搞定那个XSLT了,爽!
写了一个递归,用了一点小诡计。长期不练,算法知识已经忘光了,折腾得这叫费劲呀。

<!-- row(startpos), separate a row from startpos -->
<xsl:template name="row">
<xsl:param name="startpos"/>
<xsl:if test="$startpos &lt;= count(/site/section)">
<xsl:variable name="sa-node"
select="section[position() &gt;= $startpos
and position() &lt; $startpos + $columns
and @standalone='yes'] "/>
<xsl:if test="$sa-node">
<xsl:for-each select="/site/section">
<xsl:if test="@name = $sa-node/@name">
<xsl:if test="position() mod $columns != 1">
<xsl:call-template name="onerow">
<xsl:with-param name="startpos" select="$startpos"/>
<xsl:with-param name="endpos" select="position() - 1"/>
</xsl:call-template>
</xsl:if>
<xsl:call-template name="onerow">
<xsl:with-param name="startpos" select="position()"/>
<xsl:with-param name="endpos" select="position()"/>
</xsl:call-template>
<xsl:call-template name="row">
<xsl:with-param name="startpos" select="position() + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:if>
<xsl:if test="not($sa-node)">
<xsl:call-template name="onerow">
<xsl:with-param name="startpos" select="$startpos"/>
<xsl:with-param name="endpos" select="$startpos + $columns - 1"/>
</xsl:call-template>
<xsl:call-template name="row">
<xsl:with-param name="startpos" select="$startpos + $columns"/>
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录