5 Stimmen

for-each: jedes 3. Element erhalten (in 3 Spalten aufgeteilt)

Ich habe die folgenden Knoten in 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>

Und möchte es in das folgende html umwandeln:

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

Nachdem eine harte Zeit herauszufinden, wie man Schleife und erhalten jedes dritte Element, möchte etwas wie dieses zu tun:

<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

Möglicherweise müssen Sie last() verwenden, aber ich kann das nicht richtig hinbekommen.

5voto

In XPath wird die Bedingung lauten:

not(position() mod 3)

ou

position() mod 3 = 0

Ich wüsste nicht, warum man nicht op:mod .

EDIT : Über neue Frage subtrahieren Sie einfach den Offset. So:

X1:

position() mod 3 = 1

X2:

position() mod 3 = 2

X3:

position() mod 3 = 0

EDIT 2 : Jetzt verstehe ich Ihre Frage.

0voto

schoetbi Punkte 10841

Versuchen Sie [position() mod 3 = 1]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X