2016-07-30 12 views
0

Wenn ich ein für jede Schleife wie:Wie erhält man den nächsten zu wiederholenden Knoten in einer XSLT für jede Schleife?

<xsl:for-each select="$pChildren"> 
    <xsl:variable name="vNext" select="???" /> 
</xsl:for-each> 

Ich versuche, den nächsten Knoten zuweisen in der foreach-Schleife zu vNext iteriert werden, falls vorhanden.

Ich versuchte $pChildren[position()+1], aber hat nicht funktioniert.

+0

Es hängt davon ab, wie Sie definiert '$ pChildren'. In den meisten Fällen wird es "folgendes Geschwister :: * [1]" sein, aber es ist nicht ganz sicher. –

+0

Warum funktioniert '$ pChildren [position() + 1]' nicht? Es sieht richtig aus und ist allgemeiner als 'following-sibling :: * [1]'. Kannst du etwas Kontext hinzufügen? – nwellnhof

+1

@nwellnhof Es hat nicht funktioniert, weil '[position() + 1]' kurz für '[position() = position() + 1]' ist, was niemals wahr sein wird. –

Antwort

3

Ich würde es vorziehen, diese während zu beantworten den gesamten Kontext zu sehen, aber ich glaube:

<xsl:for-each select="$pChildren"> 
    <xsl:variable name="i" select="position()" /> 
    <xsl:variable name="vNext" select="$pChildren[$i + 1]" /> 
</xsl:for-each> 

sollte für Sie arbeiten.

0

Wenn Sie das nächste Element in einer Sequenz referenzieren möchten, sollten Sie wahrscheinlich überhaupt keine Anweisung xsl: for-each verwenden. Kehren Sie die Reihenfolge der Knoten um und verwenden Sie xsl: iterate (es sei denn, Sie verwenden hauptsächlich Multi-Threading).

Eine natürliche Art und Weise, dies zu tun ist:

<xsl:iterate select="reverse($pchildren)"> 
<xsl:param name="last" select="()"/> 

Do Stuff Here using $last to reference the item that comes next in $pchildren. 
<xsl:next-iteration> 
<xsl:with-param name="last" select="."/> 
</xsl:next-iteration> 
</xsl:iterate/>