для каждого: получить каждый 3-й элемент (разделить на 3 столбца) - PullRequest
5 голосов
/ 03 августа 2010

У меня есть следующие узлы в 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>

И хотел бы превратить его в следующий 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

Возможно, нужно использовать last (), но не могу заставить это работать правильно.

Ответы [ 2 ]

5 голосов
/ 03 августа 2010

В XPath условие будет:

not(position() mod 3)

или

position() mod 3 = 0

Я не понимаю, почему вы не можете использовать op:mod.

РЕДАКТИРОВАТЬ : О новый вопрос , просто вычтите смещение. Итак:

X1:

position() mod 3 = 1

X2:

position() mod 3 = 2

X3:

position() mod 3 = 0

РЕДАКТИРОВАТЬ 2 : Теперь я понимаю ваш вопрос.

0 голосов
/ 03 августа 2010

Попробуйте [position () mod 3 = 1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...