| 
 
Subject: sort,count,number,group solved From: quagly <quagly@xxxxxxxx> Date: Mon, 20 Mar 2000 20:23:36 -0800  | 
    Over a week later, and I have solved the puzzle I posed here
earlier.  Thanks to everyone who replied.  Hope this is useful to
someone.
Here is my original posting, solution follows.
" After perusing the FAQ I can sort, count, number, and group.
    But I cannot do them all at once.  Please help.
    Example:
xml:
<root>
    <foo>
          <bar>bard</bar>
          <bar>bark</bar>
    </foo>
    <foo>
          <bar>bark</bar>
          <bar>barb</bar>
     </foo>
</root>
Sample xsl that selects distinct <bar>
<xsl:template match="//bar[not(. = following::bar)]">
     <xsl:value-of select="."/>
</xsl:template>
produces:
bard bark barb
what I want is to number these, sort them, and count the number of times
they appear in the xml source
Desired output:
1.  barb  -1
2.  bard  -1
3.  bark  -2
I can't seem to get there from here.  Do I need to use for-each?
Thanks,
            -Quagly"
My solution:
 <xsl:template match="/">
 <DL>
 <xsl:apply-templates select="//bar[not(. = preceding::bar)]">
 <xsl:sort select="bar"/>
 </xsl:apply-templates>
 </DL>
</xsl:template>
<xsl:template match="bar">
 <DT>
 <xsl:number value="position()" format="1."/>
 <xsl:value-of select="."/>-
 <xsl:value-of select="count(//bar[.=current()])"/>
 </DT>
</xsl:template>
</xsl:stylesheet>
It is amazing to me how easy this is now that I see it.  I got very
caught up in for-eaches and variable assignments.
Please critique this for me.  Can it be improved?  Is there some
ingenious principle I have tapped into that can be articulated?
Or let me know if this is helpful to you.
 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
| Current Thread | 
|---|
  | 
| <- Previous | Index | Next -> | 
|---|---|---|
| passivetex, son of (XSL FO formatti, Sebastian Rahtz | Thread | RE: Newbie question:, Kay Michael | 
| Re: Future XSLT expansion., Paul Tchistopolskii | Date | Newbie question:, OPi | 
| Month |