This needs just a minor variation on Muenchian grouping. Define a key on
service/@id, and run through all the service elements, outputting the
element if (a) it is the first one with that key value (standard
Muenchian test) and (b) count(key(...)) != count(/*/branch).
Michael Kay
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
Adam van den Hoven
Sent: 25 September 2003 17:26
To: XSL Mailing List
Subject: [xsl] Problems selecting the right nodes.
I have a nodeset or arbitrary length that contains a set of
tags which
look something like:
<branch id="br1">
<service id="service1" />
<service id="service2" />
<service id="service3" />
</branch>
<branch id="br2">
<service id="service1" />
<service id="service4" />
</branch>
Now what I want is a nodeset that contains (uniquely) all the
services
that do not occur in all the branches. In this case I want
service 2, 3
and 4 but not 1
My original solution was iffy. I ended up creating a tokenized string
("Service2|Service3|Service4" in this case) which I then ran
through a
recursive named template which did a lot of substring-before and
substring-after. Since what I cared about are the ids, that was fine.
However, the input file is occasionally very large so this can take a
very long time. I want to find a better solution.
If possible, I think I'd like to avoid using extension
functions, unless
there is an obvious performance boost.
Any thoughts?
Adam
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list