- From: Tom Hillman <tom@expertml.com>
- Date: Thu, 3 Dec 2020 12:16:07 +0000
- To: public-xslt-40@w3.org
- Message-ID: <698f05bd-951c-48c7-a486-8c9d375d7568@Spark>
Hi,
Now that we can match templates on maps, arrays, strings, and so on, is it time to consider adding built-in templates for some of the data structures? I think these exist already for e.g. text-only copy, deep copy, deep skip, and the proposed fail mode types, but not for shallow skip and shallow copy.
Something like the following for arrays:
<xsl:template match=".[. instance of array(*)]" mode="shallow-skip">
<xsl:for-each-member select="$array">
<xsl:apply-templates select="." mode="#current"/>
</xsl:for-each-member>
</xsl:template>
<xsl:template match=".[. instance of array(*)]" mode="shallow-copy" as="array(*)">
<xsl:iterate select="1 to array:size($array)">
<xsl:param name="result" as="array(*)" select="array{}"/>
<xsl:on-completion>
<xsl:sequence select="$result"/>
</xsl:on-completion>
<xsl:variable name="head">
<xsl:apply-templates select="$array(.)" mode="#current"/>
</xsl:variable>
<xsl:next-iteration>
<xsl:with-param name="result" select="array:append($result, $head)"/>
</xsl:next-iteration>
</xsl:iterate>
</xsl:template>
Maps might need a little thinking about in that I can't think of a way to write a match test for both the value and the key of a map member - any suggestions?
_________________
Tomos Hillman
eXpertML Ltd
+44 7793 242058
Received on Thursday, 3 December 2020 12:16:33 UTC