Subject: Re: [xsl] Is this a grouping task? From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 23 Oct 2019 07:56:51 -0000 |
On 22.10.2019 20:41, Martin Honnen martin.honnen@xxxxxx wrote:On 22.10.2019 20:07, Rick Quatro rick@xxxxxxxxxxxxxx wrote:
I am using XSLT 2 and think this may require a for-each-group solution. Any advice would be appreciated. Thank you very much.
Thinking about it again, it seems in XSLT 3 simply using an accumulator makes it even more easy and compact:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="#all" version="3.0">
<xsl:mode on-no-match="shallow-copy" streamable="yes" use-accumulators="rev-change"/>
<xsl:accumulator name="rev-change" as="xs:boolean" initial-value="false()" streamable="yes"> <xsl:accumulator-rule match="topic" select="false()"/> <xsl:accumulator-rule match="topic/revst" select="true()"/> <xsl:accumulator-rule match="topic/revend" select="false()"/> </xsl:accumulator>
<xsl:template match="topic/*[accumulator-before('rev-change')]"> <xsl:copy> <xsl:attribute name="rev">changed</xsl:attribute> <xsl:apply-templates select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template>
<xsl:template match="revst | revend" priority="2"/>
</xsl:stylesheet>
Saxon EE however doesn't like it for streaming and crashes
Michael Kay has already identified the problem with streaming in above code, using
<xsl:template match="topic/*[boolean(accumulator-before('rev-change'))]">
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Is this a grouping task?, Dimitre Novatchev dn | Thread | Re: [xsl] Is this a grouping task?, Terry Badger terry_b |
Re: [xsl] Is this a grouping task?, Dimitre Novatchev dn | Date | [xsl] Separator for xsl:number @for, Rick Quatro rick@xxx |
Month |