XSLT - finden-position (), wenn innerhalb einer geschachtelten for-each
Ich bin mit XSLT zur transformation auf einige ziemlich komplexe XML. Um zu erreichen, die Ausgabe, die ich brauche, habe ich zum erstellen einer verschachtelten for-Schleife so etwas wie die folgenden:
Quell-XML -
<root>
<element1>
<child>
<aaa></aaa>
<bbb></bbb>
</child>
</element1>
<element2/>
<element3/>
<element3/>
<element3/>
</root>
XSLT
<xsl:for-each select="element3">
<!-- Do some stuff -->
<xsl:for-each select="../element1/child/*">
<!-- Do some more stuff -->
</xsl:for-each>
</xsl:for-each>
Problem
Was ich versuche zu tun ist, während in meinem geschachtelte Schleife (auf ../element1/child/*
) - ich würde gern herausfinden:
- Die position des Elements, ich bin derzeit auf der looping - wenn ich zum Beispiel wurde der Fokus derzeit auf
<bbb>
dann diese position (glaube ich) wäre '1' - Die position der übergeordneten Schleife (auf
element3
) - also, wenn, zum Beispiel, war ich auf die Dritte Instanz des<element3>
und dann die Schleife durch../element1/child/*
und konzentrierte sich auf<aaa>
- die beiden Werte würde ich nach wäre '2' und '0'.
Im Idealfall würde ich mag in der Lage sein, um die Zuordnung dieser Werte zu einer Variablen. Ich habe versucht, mit der position()
notation wie unten, aber das scheint nicht zu funktionieren.
<xsl:for-each select="../element1/child/*">
<xsl:variable name="postion_current_loop" select="position()"/>
<xsl:variable name="postion_parent_loop" select="??????"/>
<!-- Do some more stuff -->
</xsl:for-each>
Wenn jemand irgendwelche Ideen, wie ich das erreichen kann, dies würde sehr geschätzt werden! Ich bin mit XSLT 2.0, bin aber offen für Lösungen, die anhand von XSLT 1.0-wenn es sein muss. Vielen Dank im Voraus.
for-each
anstelle von separaten Vorlagen. Ich kann sehen, dass mindestens eine anständige Lösung wenn Sie die Vorlagen korrekt.Ich bin derzeit nur über eine einzige Vorlage - ich bin offen für eine Lösung mit mehreren, da bin ich noch herausfinden, wie dies zu erreichen. Ich bin ziemlich neu in XSLT so nicht verstanden das Konzept von mehreren Vorlagen noch.
OK. Diese Art der Sache ist viel einfacher, mit mehrere templates (XSLT-im Allgemeinen - es lohnt sich, ein gutes Verständnis für das Konzept).
Danke, ich werde auf jeden Fall erkunden! Jetzt die Antwort von @michael.hor257k hat mir auch ein Ausgangspunkt für eine Lösung.
InformationsquelleAutor danw | 2014-07-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie versuchen, ändern Sie Ihre Eingabe:
dann sehen, was Sie erhalten mit:
InformationsquelleAutor michael.hor257k
Habe ich einige zusätzliche id-Attribute, um Ihre Eingabe, so dass Sie sehen können welcher Knoten wird immer verarbeitet, wenn also meine Eingabe sah aus wie:
Diesem stylesheet hat, was ich denke, Sie versuchen zu tun - es verarbeitet jede
element3
und alle Abläufe der../element1/child/*
Knoten für jedenelement3
:Ist das Ergebnis:
Hoffe, das hilft
InformationsquelleAutor Nic Gibson