C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



XSL / Die XSLT - Struktur / XPath 3.1: Array / XPath: array:subarray

XPath: array:subarray

XPath: array:subarray

➪ Ein Array ist ein neuer Datentyp in XDM 3.1 mit umfangreicher Funktionalität, der als ein Item einer Sequenz zu betrachten ist.

Die XPath-Funktion array:subarray errechnet ein Teil-Array, das mit der gewünschten Start-Position beginnt und alle restlichen Felder übernimmt. Als optionaler zweiter Parameter kann die Anzahl der Felder angegeben werden, die ab der Startposition einbezogen werden sollen.

Beispiel: Aus dem ursprünglich definierten "varray" mit den Inhalten ['Hugo', 'Lotte', 'Theo'] basteln Sie ein Subarray "vsubarray", das an der zweiten Stelle (also bei 'Lotte') beginnt und bis zum Ende ('Theo') durchzieht.


 <xsl:variable name="vsubarray" select="array:subarray($varray, 2)"/>

Der optionale zweite Parameter, der die Anzahl der gesuchten Felder beschränkt, würde ein Subarray ['Lotte', 'Theo'] auch dann nur auf die beiden begrenzen, wenn das Haupt-Array "varray" noch weitere Einträge hätte.


<xsl:variable 
     name="vsubarray" 
     select="array:subarray($varray, 2, 2)"/>

Im vorliegenden Fall macht das keinen Unterschied, und der Aufruf


<xsl:template match="/">
  <root>
   <get nr="1">
    <xsl:value-of select="array:get($vsubarray, 1)"/>
   </get>
   <get nr="{array:size($vsubarray)}">
    <xsl:value-of 
         select="array:get($vsubarray, 
                           array:size($vsubarray)
                          )"/>
   </get>
  </root>
</xsl:template>

... bringt dieses Ergebnis:


<root>
 <get nr="1">Lotte</get>
 <get nr="2">Theo</get>
</root>

Auch hier ist es sinnvoll, sich die Einzelwerte anzusehen:


<xsl:template match="/">
  <root>
    <xsl:for-each select="1 to array:size($vsubarray)">
     <xsl:variable name="vpos" select="fn:position()"/>
     <wert nr="{$vpos}">
      <xsl:value-of select="array:get($vsubarray, $vpos)"/>
     </wert>
    </xsl:for-each>
  </root>
</xsl:template>

Haben Sie etwas anderes erwartet?


<root>
  <wert nr="1">Lotte</wert>
  <wert nr="2">Theo</wert>
</root>

wg / 31. Oktober 2020



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