<xsl:for-each select='./node [position() <= (count(*) div 2)]'> <li>foo</li> </xsl:for-each> <xsl:for-each select='./node [count(*) div 2 < position()]'> <li>bar</li> </xsl:for-each>
My list has 12 nodes, but the second list is always 8 and the first is always 4. What’s wrong with my selects?
When you do
count(*), the current node is thenodeelement being processed. You want eithercount(current()/node)orlast()(preferable), or just calculate the midpoint to a variable for better performance and clearer code: