Frage zu for each Schleife xslt

IceDragon208

Grünschnabel
Guten Tag :),
ich habe eine XML Datei die ungefähr so aufgebaut ist (wird so generiert kann an dieser also nichts ändern).
Code:
<DATAPACKET Version="2.0">
<ROWDATA>
<ROW  NAME="Dert*Test*Nr1" GRUPPE ="Gut*&amp;*fein" />
<ROW  NAME="Dert*Test*Nr2" GRUPPE ="lecker*&amp;*fein" />
<ROW  NAME="Dert*Test*Nr3" GRUPPE ="lecker*&amp;*fein" />
<ROW  NAME="Dert*Test*Nr4" GRUPPE ="Gut*&amp;*fein" />
</DATAPACKET>
</ROWDATA>

also nur als kleines Beispiel, die komplette Datei ist viel umfangreicher.

Ich versuche nun einen NAMEN auszulesen, aber er muss zur richtigen GRUPPE gehören, d.h. nehmen wir an ich will den Text aus Test Nr 2 haben.

Code:
		<text>
					<xsl:for-each select="/DATAPACKET/ROWDATA/ROW">
						<xsl:if test="/DATAPACKET/ROWDATA/ROW/@GRUPPE = 'lecker*&amp;*fein' ">
							<xsl:value-of select="/DATAPACKET/ROWDATA/ROW/@NAME"/>
						</xsl:if>
					</xsl:for-each>
			</text>

Aber das geht nicht ich produziere eine art Endlosschleife und es wird auch immer nur der "TEST1" ausgelesen und ganz oft ins Formular geschrieben (Die ausgabe), auch die IF abfrage ist glaube ich nicht richtig weil er ja nicht genau weiß an welcher Stelle er steht oder doch? Blicke bei der xslt Programmierung noch nicht so ganz durch :-(.
Kann mir eventuell jemand einen Tipp geben?

MFG Ice
 
Zuletzt bearbeitet:
Hi.

Du darfst nur in der Schleife nicht mit einem absoluten Pfad arbeiten.

Du mußt vom "Kontextknoten" ausgehen, welcher der aktuelle Knoten (bzw. Element) innerhalb der Schleife ist.

Bsp.
XML:
<xsl:for-each select="/DATAPACKET/ROWDATA/ROW">
                        <xsl:if test="@GRUPPE = 'lecker*&amp;*fein' ">
                            <xsl:value-of select="@NAME"/>
                        </xsl:if>
                    </xsl:for-each>
Aber, wenn du nur ein bestimmtes Element selektieren willst, kannst du das auch direkt mit XPath machen:
XML:
<xsl:value-of select="/DATAPACKET/ROWDATA/ROW[@GRUPPE = 'lecker*&amp;*fein']/@Name"/>
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Antwort, die 2te Möglichkeit funktioniert,
Ich frage mich nur wie ich es hinkriege wenn ich den 3ten Test haben will der die selbe Gruppe hat, habe es mit Speicherung in eine variable versucht um diese dann abzufragen aber das funktioniert alles nicht, gibt es für so einen Fall auch eine einfachere Lösung oder einen Ansatz?
 
Danke für die Antwort, die 2te Möglichkeit funktioniert,
Gut. Aber was funktioniert an der ersten Variante nicht?
Ich frage mich nur wie ich es hinkriege wenn ich den 3ten Test haben will der die selbe Gruppe hat, habe es mit Speicherung in eine variable versucht um diese dann abzufragen aber das funktioniert alles nicht, gibt es für so einen Fall auch eine einfachere Lösung oder einen Ansatz?
Dazu kann man die Position des Elementes in der Eregnis-Knotenmenge ermitteln und dann eben nicht das erste, sondern das zweite auswählen:
XML:
<xsl:value-of select="/DATAPACKET/ROWDATA/ROW[@GRUPPE = 'lecker*&amp;*fein'][position() = 2]/@Name"/>
 
Zuletzt bearbeitet von einem Moderator:
vielen dank nochmals für die Antwort, ich muss mir nochmal einige Tutorials und Übungen anschauen das ich besser in das Thema xslt reinkomme. die andere Variante scheint auch zu gehen ich hatte einen Tippfehler drinn >.<
 
Zurück