Gern stehe ich zur fachlichen Unterstützung in XML-Technologien, C#.NET, VisualBasic.NET und Java zur Verfügung. Sprechen Sie mich einfach an: Mail oder ☎ 0151 . 750 360 61


XPath 3.0, XPath 2.0, XPath 1.0 / XPath-Funktionen / XPath: Sequenz-Funktionen / XPath: for-each-pair

XPath: for-each-pair

XPath: for-each-pair

➪ Die XPath-Funktion for-each-pair bildet Kombinationen aus zwei Sequenzen, die dieselbe Anzahl Items haben müssen.

Hat eine Sequenz mehr Items als die andere, dann werden die überschüssigen Items ignoriert.

for-each-pair benötigt drei Parameter:

pic/for_each_pair.png

Die Kombination aus den beiden Sequenzen

sowie der Funktionsaufruf concat ...


<xsl:template match="/">
  <root>
    <xsl:for-each 
         select="for-each-pair(
                (1 to 3), 
                ('Holzflos', 'Denzschlos', 'Ratlos'),  
                concat#2)">
        <wert>
          <xsl:value-of select="."/>
        </wert>
    </xsl:for-each>
  </root>
</xsl:template>

... ergibt dieses Resultat:


<root>
  <wert>1Holzflos</wert>
  <wert>2Denzschlos</wert>
  <wert>3Ratlos</wert>
</root>

Dagegen haben die Argumente


<xsl:template match="/">
  <root>
   <xsl:for-each 
        select="for-each-pair(
                (3 to 7)[. mod 2 = 1], 
                (18 to 30), 
                function($p1, $p2){$p1+$p2*100})">
    <wert>
     <xsl:value-of select="."/>
    </wert>
   </xsl:for-each>
  </root>
</xsl:template>

... dieses Ergebnis:


<root>
  <wert>1803</wert>
  <wert>1905</wert>
  <wert>2007</wert>
</root>

Dasselbe Ergebnis erhalten Sie beim Aufruf der for-each-pair-Funktion in XQuery:


<root>
{
  for $x in for-each-pair(
           (3 to 7)[. mod 2 = 1], (18 to 30),  
           function($p1, $p2){$p1+$p2*100})
  return 
    <wert>     
      {$x}
    </wert>
}
</root>

Auch hier ist die typsaubere Parameterübergabe sowie die Deklaration des Rückgabetyps der Funktion empfehlenswert, in diesem Fall also xs:integer. Der Aufruf generiert dasselbe Ergebnis wie vorher.


<root>
{
  for $x in for-each-pair(
           (3 to 7)[. mod 2 = 1],  (18 to 30),  
           function($p1 as xs:integer, $p2 as xs:integer) 
                   as xs:integer 
                   {$p1+$p2*100})
  return 
    <wert>     
      {$x}
    </wert>
}
</root>

wg / 13. April 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






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/foreachpair.html