Subject: RE: Retrieving sequence of unique strings from another sequence
From: "Robby Pelssers" <robby.pelssers@xxxxxxxxx>
Date: Wed, 6 Jan 2010 10:59:33 +0100
|
What about http://www.w3.org/TR/xpath-functions/#func-distinct-values
??
Cheers,
Robby Pelssers
-----Original Message-----
From: Houghton,Andrew [mailto:houghtoa@xxxxxxxx]
Sent: Tuesday, January 05, 2010 10:50 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: Retrieving sequence of unique strings from another
sequence
> From: Liam R E Quin [mailto:liam@xxxxxx]
> Sent: Tuesday, January 05, 2010 02:51 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: Retrieving sequence of unique strings from another
> sequence
>
> On Tue, 2010-01-05 at 13:41 -0500, Houghton,Andrew wrote:
> > I have a sequence of strings, e.g., ('abc', 'def', 'def', 'ghi'),
and
> > I want to create a new sequence that will have only the unique
> strings in it.
>
> [...]
>
> > Can anyone suggest how I might use one or more XSL 2.0 functions to
> > return only the unique strings.
>
> $sequence[count(index-of($sequence, .)) eq 1]
> maybe?
I think this is similar to what G. Ken Holman proposed:
for $each in $list
return if( count($list[.=$each])=1 ) then $each else ()
But both would probably preform slowly on large sequences.
Michael Kay suggested:
<xsl:for-each-group select="$list" group-by=".">
<xsl:sequence select="current-group()[last()=1]"/>
</xsl:for-each-group>
which probably would preform better on large sequences however,
I needed to produce the result sequence as part of a complicated
XPath expression. So I think the solution I'm leaning on is to
create an XSL 2.0 function:
<xsl:function name="my:unique-values" as="xsd:string*">
<xsl:param name="values" as="xsd:string*" />
<xsl:for-each-group select="$values" group-by=".">
<xsl:sequence select="current-group()[last() = 1]" />
</xsl:for-each-group>
</xsl:function>
Thank you all for the suggestions, Andy.
| Current Thread |
Liam R E Quin - 5 Jan 2010 20:53:55 -0000
- Houghton,Andrew - 5 Jan 2010 21:50:10 -0000
- Robby Pelssers - 6 Jan 2010 09:59:08 -0000 <=
a kusa - 5 Jan 2010 19:39:33 -0000
|
|