[xsl] removing duplicates from a sequence while retaining order

Subject: [xsl] removing duplicates from a sequence while retaining order
From: "Birnbaum, David J" <djbpitt@xxxxxxxx>
Date: Mon, 8 Oct 2012 20:32:19 -0400
Dear XSLT list,

Is there an easy way in XPath (not using XSLT instructions) to select only the
first occurrence of a specific value in a sequence of atomic values, so as to
return the sequence in the original order, but with re-occurrences of each
value after the first appearance of that value removed? For example, given an
input sequence:

	('Matthew','Mark','Luke','Matthew','John')

I want to produce

	('Matthew','Mark','Luke','John')

I can't rely on using distinct-values() because that isn't guaranteed to keep
specifically the *first* occurrence of a value.

In an XSLT context I can construct a temporary tree, poke each value into an
element, all on the same level in the hierarchy, and then test for:

*[not(preceding-sibling::* = .)]

but I don't know how to write an XPath predicate that will filter the sequence
of *atomic values* the way I want. Is this just a blind spot? Can anyone
advise?

Thanks,

David
djbpitt@xxxxxxxxx

Current Thread