XPath 3.0, XPath 2.0, XPath 1.0 / XPath Funktionen / XPath: Sequence-Funktionen / XPath: fold-left

XPath: fold-left

XPath: fold-left

➪ Die XPath-Funktion fold-left verarbeitet alle Items einer Sequenz von links nach rechts.

Die XPath-Funktion fold-left fordert drei Parameter ein: zwei Sequenzen, sowie eine Funktion, mit der das Ergebnis berechnet wird.

Der folgende Aufruf definiert zwei Sequenzen sowie deren Verkettung (Komma!) in einer Funktion.


<xsl:template match="/">
  <root>
   <xsl:for-each 
        select="fn:fold-left(
                   (5 to 10), 
                   (15 to 20), 
                   function($a, $b){$a, $b})">
    <wert>
     <xsl:value-of select="."/>
    </wert>
   </xsl:for-each>
  </root>
</xsl:template>

Bemerkenswert ist hierbei, daß die zweite Sequenz zuerst betrachtet wird:


<root>
  <wert>15</wert>
  <wert>16</wert>
  <wert>17</wert>
  <wert>18</wert>
  <wert>19</wert>
  <wert>20</wert>
  <wert>5</wert>
  <wert>6</wert>
  <wert>7</wert>
  <wert>8</wert>
  <wert>9</wert>
  <wert>10</wert>
</root>

Das zweite Beispiel multipliziert die Einzelwerte der Reihe 6 * 1 * 2 * 3 miteinander:


<xsl:template match="/">
  <root>
   <xsl:for-each 
        select="fn:fold-left(
                   (1 to 3), 
                   6, 
                   function($a, $b){$a * $b})">
    <wert>
     <xsl:value-of select="."/>
    </wert>
   </xsl:for-each>
  </root>
</xsl:template>

... und kommt auf ein nachvollziehbares Ergebnis:


<root>
  <wert>36</wert>
</root>

Auch andere bewährte Funktionen können eingebunden werden, etwa concat:


<xsl:template match="/">
  <root>
   <xsl:for-each 
        select="fn:fold-left(
                   1 to 5, 
                   'Sprachlos', 
                   fn:concat(?, ' | ', ?))">
    <wert>
     <xsl:value-of select="."/>
    </wert>
   </xsl:for-each>
  </root>
</xsl:template>

Das erzielte Ergebnis sieht dann so aus:


<root>
  <wert>Sprachlos | 1 | 2 | 3 | 4 | 5</wert>
</root>

wg / 12. Februar 2018



Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf:

Vorname
Nachname
Mailadresse







Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/foldleft.html