문제
<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>
나의 목록은 12 노드,하지만 두 번째 목록 항상 8 첫 번째는 항상 4.무엇을 잘못을 가진 나를 선택?
해결책
을 때 당신 count(*)
, 현재 노드가 node
소 처리되고있다.당신이 원하는 어느 count(current()/node)
나 last()
(바람직하다),또는 계산의 중간 지점을 변수에 대한 더 나은 성과 및 명확하게 코드:
<xsl:variable name="nodes" select="node"/>
<xsl:variable name="mid" select="count($nodes) div 2"/>
<xsl:for-each select="$nodes[position() <= $mid]">
<li>foo</li>
</xsl:for-each>
<xsl:for-each select="$nodes[$mid < position()]">
<li>bar</li>
</xsl:for-each>
다른 팁
사용하여 시도할 수 있습니다 last()
있는 기능을 줄 것이 당신의 크기는 현재 context:
<xsl:for-each select="./node [position() <= last() div 2]">
<li>foo</li>
</xsl:for-each>
<xsl:for-each select="./node [last() div 2 < position()]">
<li>bar</li>
</xsl:for-each>
나는 모두에서 확실히,하지만 그것을 나에게 보인 count(*)
입을 하지 않고 무엇을 생각합니다.수를 계산하는 아이들의 현재 노드의 크기가 아니라 현재 노드의 목록입니다.수 당신이 그것을 인쇄하는지 확인 8 9 대의 12?
사 last()
상황에 맞는 크기입니다.
시도 횟수(../node).다음을 제공합니다 정확한 결과는 내가 테스트는 XML 파일의(간단한 노드 루트 노드는 요소)사용하여 xsltproc XSLT 프로세서입니다.
<xsl:for-each select="node[position() <= (count(../node) div 2)]">
...
</xsl:for-each>
<xsl:for-each select="node[(count(../node) div 2) < position()]">
...
</xsl:for-each>
제휴하지 않습니다 StackOverflow