XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
XPath / XPath 3.1: Array / 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 / 22. April 2021
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de