代码之家  ›  专栏  ›  技术社区  ›  Louis W

for each:每3项获取一次(分成3列)

  •  5
  • Louis W  · 技术社区  · 15 年前

    xsl中有以下节点:

    <foo>
        <bar>1</bar>
        <bar>2</bar>    
        <bar>3</bar>
        <bar>4</bar>        
        <bar>5</bar>
        <bar>6</bar>    
        <bar>7</bar>
        <bar>8</bar>            
        <bar>9</bar>
    </foo>
    

    <ul class="one">
        <li>1</li>
        <li>4</li>
        <li>7</li>
    </ul>
    <ul class="two">
        <li>2</li>
        <li>5</li>
        <li>8</li>
    </ul>
    <ul class="three">
        <li>3</li>
        <li>6</li>
        <li>9</li>
    </ul>
    

    很难弄清楚如何循环并获取第三个项目,希望执行以下操作:

    <ul class="one">
    <xsl:for-each select="exlt:node-set($blah)/foo/bar[X1]">
        <li><xsl:value-of select="node()"/></li>
    </xsl:for-each>
    </ul>
    
    <ul class="two">
    <xsl:for-each select="exlt:node-set($blah)/foo/bar[X2]">
        <li><xsl:value-of select="node()"/></li>
    </xsl:for-each>
    </ul>
    
    <ul class="three">
    <xsl:for-each select="exlt:node-set($blah)/foo/bar[X3]">
        <li><xsl:value-of select="node()"/></li>
    </xsl:for-each>
    </ul>   
    
    Where:
    X1 = Every third item starting from position 1
    X2 = Every third item starting from position 2
    X3 = Every third item starting from position 3
    

    2 回复  |  直到 15 年前
        1
  •  5
  •   user357812 user357812    15 年前

    在XPath中,条件是:

    not(position() mod 3)
    

    position() mod 3 = 0
    

    我不明白你为什么不能用 op:mod .

    编辑 :关于 ,只需减去偏移量。所以:

    第1页:

    position() mod 3 = 1
    

    X2码:

    position() mod 3 = 2
    

    第3部分:

    位置()模3=0
    

    :现在我明白你的问题了。

        2
  •  0
  •   schoetbi    15 年前