Re: [xsl] Group handling of multiple IDREFS

Subject: Re: [xsl] Group handling of multiple IDREFS
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 19 Dec 2019 23:50:51 -0000
If this was schema-aware, then atomizing the @to attribute would return a list
of atomic values, so it would all just work...

As it is, can't you simply do group-by="tokenize(@to)"? Or have I missed
something?

Note that when the group-by expression selects multiple values, the element
will appear in multiple groups. XSLT 3.0 introduces composite="yes" which
means that the multiple values are treated as a single grouping key.

Michael Kay
Saxonica

> On 19 Dec 2019, at 23:42, Peter Flynn peter@xxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> I have a custom document type which makes heavy use of an IDREFS attribute
on an element type for cross-referencing. In the containing section, I need to
iterate across the first occurrences of the values in document order. This is
easy with an IDREF attribute, eg
>
> <xsl:for-each-group select="descendant::ref" group-by="@to">
> ...
> </xsl:for-each-group>
>
> But with IDREFS, I need to iterate across all the separate ID values
referenced, in the order in which they occur in the attribute.
>
> I could of course construct a node-set which flattens the data, or perhaps
use an index, but I wondered if anyone else has had this requirement before,
or if there was an existing function, like (hypothetically)
group-by="fn:eachof(@to)"
>
> Peter

Current Thread