2010-08-03 3 views
4

나는 다음과 같은 XSL의 노드가 있습니다를위한 각 : 각 3 항목을 가져 오기 (3 열로 분할)

<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> 

그리고 다음 HTML로 돌려 싶습니다 :

<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 

가) (마지막을 사용해야 할 수도 있습니다,하지만 제대로 작동하지 않을 수 있습니다.

답변

5

의 XPath에서, 조건은 다음과 같습니다 당신이 op:mod를 사용할 수없는 이유

not(position() mod 3) 

또는

position() mod 3 = 0 

내가 볼 수 없습니다.

편집 : 약 새로운 질문, 그냥 오프셋을 뺍니다. 그래서 :

X1 :

position() mod 3 = 1 

X2 :

position() mod 3 = 2 

X3 : 지금 당신의 질문을 이해 : 2이

position() mod 3 = 0 

편집 할 수 있습니다.

+0

생각해 볼 수도 있지만 다른 열을 반복하는 방법은 무엇입니까? 자세한 내용으로 질문을 업데이트했습니다. 어쩌면 나는 완전히 명백한 것을 놓치고있을 뿐이다. 칼럼 2를 보면 #s : 2,5,8이어야합니다. 이것은 등가 모드가 아닙니다. –

+0

감사! 나는 mod가했던 것을 완전히 오해했다고 생각한다. 숫자가 나눌 수 있는지에 따라 단지 1 또는 0이라고 생각했다. 행을 번갈아 사용하는 경우에만 사용했습니다. –

+1

@ 루이스 W : 너 잘됐다! http://www.w3.org/TR/xpath/#numbers에서 : "mod 연산자는 잘린 구분에서 나머지를 반환합니다". –

0

시도 [position() mod 3 = 1]

+0

물론 0이어야합니다 :-) – schoetbi

관련 문제