1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Frage zu for each Schleife xslt

Dieses Thema im Forum "XML Technologien" wurde erstellt von IceDragon208, 14. März 2013.

  1. IceDragon208

    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 (Text):
    1. <DATAPACKET Version="2.0">
    2. <ROWDATA>
    3. <ROW  NAME="Dert*Test*Nr1" GRUPPE ="Gut*&amp;*fein" />
    4. <ROW  NAME="Dert*Test*Nr2" GRUPPE ="lecker*&amp;*fein" />
    5. <ROW  NAME="Dert*Test*Nr3" GRUPPE ="lecker*&amp;*fein" />
    6. <ROW  NAME="Dert*Test*Nr4" GRUPPE ="Gut*&amp;*fein" />
    7. </DATAPACKET>
    8. </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):
    1.         <text>
    2.                     <xsl:for-each select="/DATAPACKET/ROWDATA/ROW">
    3.                         <xsl:if test="/DATAPACKET/ROWDATA/ROW/@GRUPPE = 'lecker*&amp;*fein' ">
    4.                             <xsl:value-of select="/DATAPACKET/ROWDATA/ROW/@NAME"/>
    5.                         </xsl:if>
    6.                     </xsl:for-each>
    7.             </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: 15. März 2013
  2. deepthroat

    deepthroat Erfahrenes Mitglied

    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.
    Code (XML):
    1. <xsl:for-each select="/DATAPACKET/ROWDATA/ROW">
    2.                         <xsl:if test="@GRUPPE = 'lecker*&amp;*fein' ">
    3.                             <xsl:value-of select="@NAME"/>
    4.                         </xsl:if>
    5.                     </xsl:for-each>
    Aber, wenn du nur ein bestimmtes Element selektieren willst, kannst du das auch direkt mit XPath machen:
    Code (XML):
    1. <xsl:value-of select="/DATAPACKET/ROWDATA/ROW[@GRUPPE = 'lecker*&amp;*fein']/[USER=259418]@Name[/USER]"/>
     
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  3. IceDragon208

    IceDragon208 Grünschnabel

    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?
     
  4. deepthroat

    deepthroat Erfahrenes Mitglied

    Gut. Aber was funktioniert an der ersten Variante nicht?
    Dazu kann man die Position des Elementes in der Eregnis-Knotenmenge ermitteln und dann eben nicht das erste, sondern das zweite auswählen:
    Code (XML):
    1. <xsl:value-of select="/DATAPACKET/ROWDATA/ROW[@GRUPPE = 'lecker*&amp;*fein'][position() = 2]/[USER=259418]@Name[/USER]"/>
     
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  5. IceDragon208

    IceDragon208 Grünschnabel

    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 >.<
     
Die Seite wird geladen...