Veröffentlicht 20. März 20196 j Hey Leute, und noch eine Frage von mir Gestern hatte ich ja folgende Frage gepostet: Das Problem konnte glücklicherweise gelöst werden, nur bin ich jetzt auf ein anderes Problem gestoßen, sämtliche Variablen die ich im <xsl:for-each> definiert habe, sind ja nur in diesem Kontext verfügbar, sobald ich die Schleife verlasse, sind die Variablen auch nichtig. Das war etwas das ich leider komplett vergessen hatte bei XSLT und was es ja von "normalen" Programmiersprachen unterscheidet. Das Problem dabei ist, ich brauche einige Berechnungsergebnisse aus Variablen in der Schleife um einen Gesamtwert zu den Berechneten Werten pro ID zu ermitteln. Die Ergebnisse in der Schleife muss ich natürlich auch erstmal "speichern" da diese ja immer überschrieben werden bei einer neuen iteration, wenn ich das richtig verstanden habe. Um das Szenario von der letzten Frage aufzugreifen: <root> <elemente> <element> <id>1</id> <initalwert>10</initalwert> </element> <element> <id>2</id> <initalwert>5</initalwert> </element> </elemente> <testfälle> <testfall> <tid>1</tid> <beschreibung>hshgoasn</beschreibung> <multiplikator>20</multiplikator> </testfall> <testfall> <tid>2</tid> <beschreibung>dhfoashgfon</beschreibung> <multiplikator>40</multiplikator> </testfall> </testfälle> <extra> <prozentwert>20</prozentwert> </extra> </root> XSLT: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="text"/> <xsl:template match="/"> <xsl:for-each select="./root/elemente/element"> <xsl:variable name="elemtId" select="./id" /> <xsl:variable name="berechnung" select="./initalwert * //testfälle/testfall[./tid=$elemtId]/multiplikator"/> <xsl:variable name="prozentwert" select="/root/extra/prozentwert/ * ./initalwert div 100"/> ID: <xsl:value-of select="./id"/> Beschreibung: <xsl:value-of select="//testfälle/testfall[./tid=$elemtId]/beschreibung"/> Berechnung: <xsl:value-of select="$berechnung + $prozentwert"/> </xsl:for-each> Gesamtwert: <!-- Hier müsste der Gesamtwert aus den Berechnungen von ID 1 & 2 rein --> </xsl:template> </xsl:stylesheet> Ich hab jetzt verschiedene Sachen probiert, aber mein Problem ist das ich die Werte aus den iterationen nicht gespeichert und dann global verwendbar bekomme um daraus den Gesamtwert zu ermitteln.
20. März 20196 j Ich denke das geht so nicht wie du dir das vorstellst. XSLT ist keine Programmiersprache, die Variablen werden zur Transformation ausgewertet und bleiben dann so. Was du machen kannst: Du transformierst dein original XML mit XSLT in ein neues XML das zu jedem Element schon den berechneten Wert enthält. Dieses XML benutzt du dann für die eigentliche Ausgabe und kannst für den Gesamtwert sowas machen Zitat <xsl:value-of select="sum(/root/elemente/element/berechnung)" /> nicht hübsch aber das einzige was mir einfällt abgesehen von einem kleinen(?) Programm mit dem du das ganze direkt mit XPATH und etwas Programmlogik von Hand zusammenbastelst.
21. März 20196 j Autor vor 9 Stunden schrieb _n4p_: Ich denke das geht so nicht wie du dir das vorstellst. XSLT ist keine Programmiersprache, die Variablen werden zur Transformation ausgewertet und bleiben dann so. Ja das ist mir dann auch wieder eingefallen Hatte gehofft das es irgendwie doch geht ? vor 9 Stunden schrieb _n4p_: Was du machen kannst: Du transformierst dein original XML mit XSLT in ein neues XML das zu jedem Element schon den berechneten Wert enthält. Dieses XML benutzt du dann für die eigentliche Ausgabe und kannst für den Gesamtwert sowas machen nicht hübsch aber das einzige was mir einfällt abgesehen von einem kleinen(?) Programm mit dem du das ganze direkt mit XPATH und etwas Programmlogik von Hand zusammenbastelst. Hmm ok dann muss ich wohl mal schauen, wie ich das machen kann ? Danke dir schon mal
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.