小编Dan*_*ans的帖子

按 key 和 position() 对 XSLT 进行分组和排序

我试图显示按字母顺序排序的数据,以便以相同字母开头的项目位于不同的列中。在开始新列之前,这些列最多可容纳 10 个项目。我可以成功地按字母顺序划分数据并按每列的项目数划分,但我正在努力将这两个组合起来:

按字母顺序划分:

<xsl:template match="/">
<xsl:key name="node-by-first-letter" match="node" use="substring(@email, 1, 1)" />


<div class="scroller-panel">
    <xsl:for-each select="msxml:node-set($members)/node[count(. | key('node-by-first-letter', substring(@email, 1, 1))[1]) = 1]">
        <xsl:sort select="@email" order="ascending"/>

            <xsl:apply-templates select="." mode="group" />
</xsl:for-each></div></xsl:template>
<xsl:template match="node" mode="group">
    <div class="column-312 scroller-item people-search-column fade-panel">
    <h2>
        <xsl:value-of select="Exslt.ExsltStrings:uppercase(substring(@email,1,1))"/>
    </h2>
    <ul class="stripe-list">
        <xsl:apply-templates select="key('node-by-first-letter', substring(@email, 1, 1))" mode="item">
            <xsl:sort select="@email" />
        </xsl:apply-templates>    
    </ul>
    </div>
</xsl:template>
<xsl:template match="node" mode="item">
            <li>
                <a href="4.0.1.person.profile.html">
                    <xsl:value-of select="@email"/>
                </a>
            </li>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

除以每列的最大项目数:

<xsl:for-each select="msxml:node-set($members)/members/member[position() mod 10 = 1]">
<ul>
<xsl:for-each select=". …
Run Code Online (Sandbox Code Playgroud)

xml xslt grouping key xslt-2.0

1
推荐指数
1
解决办法
4870
查看次数

标签 统计

grouping ×1

key ×1

xml ×1

xslt ×1

xslt-2.0 ×1