문제

<xsl:for-each select="./node [position() &lt;= (count(*) div 2)]">
    <li>foo</li>
</xsl:for-each>
<xsl:for-each select="./node [count(*) div 2 &lt; 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() &lt;= $mid]">
  <li>foo</li>
</xsl:for-each>
<xsl:for-each select="$nodes[$mid &lt; position()]">
  <li>bar</li>
</xsl:for-each>

다른 팁

사용하여 시도할 수 있습니다 last() 있는 기능을 줄 것이 당신의 크기는 현재 context:

<xsl:for-each select="./node [position() &lt;= last() div 2]">
   <li>foo</li>
</xsl:for-each>
<xsl:for-each select="./node [last() div 2 &lt; position()]">
   <li>bar</li>
</xsl:for-each>

나는 모두에서 확실히,하지만 그것을 나에게 보인 count(*) 입을 하지 않고 무엇을 생각합니다.수를 계산하는 아이들의 현재 노드의 크기가 아니라 현재 노드의 목록입니다.수 당신이 그것을 인쇄하는지 확인 8 9 대의 12?

last() 상황에 맞는 크기입니다.

시도 횟수(../node).다음을 제공합니다 정확한 결과는 내가 테스트는 XML 파일의(간단한 노드 루트 노드는 요소)사용하여 xsltproc XSLT 프로세서입니다.

<xsl:for-each select="node[position() &lt;= (count(../node) div 2)]">
    ...
</xsl:for-each>
<xsl:for-each select="node[(count(../node) div 2) &lt; position()]">
    ...
</xsl:for-each>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top