[xsl] RE: Problem with selecting UNIQUE attribute

Subject: [xsl] RE: Problem with selecting UNIQUE attribute
From: "Kevin Read" <kevin@xxxxxxxxxxxxxxxx>
Date: Sun, 17 Jun 2001 20:30:47 +0930

many thanks, it worked like a charm - I owe you a beer!!  Next time you're
in Australia.......

I'll take a look at Jenni's site and work through the Muenchian method.  I
have a feeling that the xml packets that will be passing through are likely
to get very large.  So this will be a good pre-emptive step to take now.

Once again, thanks


-----Original Message-----
From: Dimitre Novatchev [mailto:dnovatchev@xxxxxxxxx]
Sent: Sunday, 17 June 2001 8:23 PM
To: kevin@xxxxxxxxxxxxxxxx
Cc: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: Problem with selecting UNIQUE attribute

Kevin Read wrote:
> It seems that no matter what combination of select expressions I use on
> build-dirlist I am unable to select on the unique values. :-(

> <xsl:template name="build-dirlist">
>  <xsl:param name="LVL"/>
>   <xsl:for-each select="//dir[@level=$LVL and
> = @name])]">
>    <xsl:sort select="@name" order="ascending" />
>     <option>
>      <xsl:value-of select="@name"/>
>     </option>
>   </xsl:for-each>
> </xsl:template>

Hi Kevin,

The problem is in the following two lines of your code:
>   <xsl:for-each select="//dir[@level=$LVL and
> = @name])]">

What you want is to get all "dir" elements on a level, such that their
attribute is not equal to the "name" attribute of any of the preceding

This can be specified as:

//dir[@level=$LVL and not(@name = preceding::dir/@name)]

After this correction the template will be working correctly. Its code will

<xsl:template name="build-dirlist">
 <xsl:param name="LVL"/>
  <xsl:for-each select="//dir[@level=$LVL and not(@name =
   <xsl:sort select="@name" order="ascending" />
     <xsl:value-of select="@name"/>

Dimitre Novatchev.
P.S. It is usually recommended to optimise expressions like "//dir" and also
to use
the Muenchian method for grouping, which uses keys and can be much more
than what you're using -- comparing every node with all preceding
identically typed
nodes -- this has complexity of O(N*N), where N is the number of all nodes
of this
same type in the xml source document.

Do You Yahoo!?
Spot the hottest trends in music, movies, and more.

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

Current Thread