Re: [xsl] duplicate test

Subject: Re: [xsl] duplicate test
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Tue, 9 Apr 2002 14:46:36 +0100
Hi Ahmad,

> I'm trying to remove duplicates from a list of characters when they
> are sending multiple messages in a room until they leave and come
> back in. My stylesheet is as follows: -
[snip]
> <xsl:template match="/">
>   <xsl:for-each select="$vLocations">
>     <xsl:value-of select="concat('Location: ', LOCATION_ID, ':', $NL )" />
>     <xsl:for-each select="/LOG/*/LOCATION_ID [. = current()/LOCATION_ID]">

Why not use the key again here? It will be a lot quicker:

  <xsl:for-each select="key('kByID', LOCATION_ID)">
    ...
  </xsl:for-each>

>       <xsl:if test="not(../CHARACTER_ID =
>                         ../preceding-sibling::DIRECT
>                             [CHARACTER_ID = current()[1]/CHARACTER_ID)">

Something's gone wrong here. That isn't a valid XPath expression
(there's no closing ] character for the predicate), and I don't think
that it would do what you want even if it was.

I think that what you're trying to do here is see if the last DIRECT
element that involved the character that's involved in this DIRECT,
LOCAL, GLOBAL or ADMIN element involved the same location. Is that
correct? If so, you need (assuming that you use the modified
xsl:for-each above):

  <xsl:if test="not(preceding-sibling::DIRECT
                     [CHARACTER_ID = current()/CHARACTER_ID][1]
                     /LOCATION_ID = LOCATION_ID)">
    ...
  </xsl:if>

>       <xsl:value-of select="concat(' ', ../CHARACTER_ID, $NL)" /> 

If you make the change to the xsl:for-each, you'll have to amend this
to:

  <xsl:value-of select="concat(' ', CHARACTER_ID, $NL)" />

When I test these changes with the sample data you sent, I get:

Location:  24488 :
    10010
    10010
Location:  34567 :
    10010
Location:  31132 :
    20241

Which is what you wanted.
    
Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


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


Current Thread