Re: [xsl] getting distinct content from list (?)

Subject: Re: [xsl] getting distinct content from list (?)
From: Kurt George Gjerde <kurt.gjerde@xxxxxxxxxxxxxxxxx>
Date: Thu, 22 Aug 2002 19:53:20 +0200 (MET DST)
On Thu, 22 Aug 2002, Vasu Chakkera wrote:
> Your Problem is simple

Great.

> but without you providing the XML file, nothing much
> can be done.can you please send a snip.. of your xml so that its easu to
> sort your  problem.

Sorry. Here it is.

XML:

<ming>

  <users>
    <user id="cynthia"  email="cynthia@xxxxxxxxxxx"  global-notify="yes"/>
    <user id="bob"      email="bob@xxxxxxxxxxx"/>
    <user id="janet"    email="janet@xxxxxxxxxxxxxxx"/>
    <user id="jack"     email="jack@xxxxxxxxxxx"/>
  </users>

  <clients>
    <client id="frontside">
      <admin user="jack"/>
    </client>
    <client id="uptown">
      <admin user="cynthia"/>
    </client>
    <client id="duke"/>
  </clients>

  <monitors>
    <monitor client="frontside">
      <notify user="cynthia"/>
      <notify user="janet"/>
    </monitor>
    <monitor client="uptown">
      <notify user="janet"/>
    </monitor>
  </monitors>

</ming>


XSL:

<xsl:template match="monitor">

  <xsl:variable name="myClient" select="@client"/>

  <xsl:variable name="notifyList">
    <xsl:for-each select="notify/@user |
          /ming/users/user[@global-notify='yes']/@id |
          /ming/clients/client[@id=$myClient]/admin/@user"
    >
      <xsl:sort select="."/>
      <xsl:variable name="pos" select="position()"/>
      <xsl:choose>
        <xsl:when test="last() &gt; 1 and position()=last()"> and </xsl:when>
        <xsl:when test="position() &gt; 1">, </xsl:when>
      </xsl:choose>
      <xsl:value-of select="."/>
    </xsl:for-each>
  </xsl:variable>

  <p>
    Client: <xsl:value-of select="@client"/><br/>
    Notify: <xsl:value-of select="$notifyList"/>
  </p>

</xsl:template>



For client="frontside" this would output
"cynthia, cynthia, jack and janet"
(without sorting: "cynthia, jack, cynthia and janet").


thanks,
-kurt.


> >From: Kurt George Gjerde <kurt.gjerde@xxxxxxxxxxxxxxxxx>
> >Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> >To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> >Subject: [xsl] getting distinct content from list (?)
> >Date: Thu, 22 Aug 2002 16:31:10 +0200 (MET DST)
> >
> >Hi,
> >
> >The least of my xslt problems at the moment is this one (I have others
> >which I'm sure I'll come back to ;). This is probably easy
> >but I just can't see it. Here it goes.
> >
> >I have an xpath which results in a list like:
> >'cynthia', 'bob', 'janet', 'bob', 'jack', 'bob', 'jack'.
> >
> >These are user IDs collected from different locations in a document. The
> >actual xpath is:
> >   notify/@user |
> >   /ming/users/user[@global-notify='yes']/@id |
> >   /ming/client[@id=$myClient]/admin/@user
> >
> >I need to output this as: "bob, cynthia, jack and janet".
> >Without the duplicates (sorted and xslt 1.0).
> >
> >How?
> >
> >

__________
kurt george gjerde <kurt.gjerde@xxxxxxxxxxxxxxxxx>
intermedia uib, university of bergen


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


Current Thread