Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hey Leute, 

und noch eine Frage von mir :D 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.

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.

  • 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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.