xsl-list
[Top] [All Lists]

RE: Problems selecting the right nodes.

2003-09-25 15:49:33
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



<Prev in Thread] Current Thread [Next in Thread>