XML data displaying more than it should

I have this xml file:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?xml-stylesheet type="text/xsl" href="jazz.xsl" ?>

<specials>
   <cd>Kind of Blue
      <artist>Miles Davis</artist>
      <price>$11.99</price>
      <track length="9:22">So What</track>
      <track length="9:46">Freddie Freeloader</track>
      <track length="5:37">Blue in Green</track>
      <track length="11:33">All Blues</track>
      <track length="9:26">Flamenco Sketches</track>
   </cd>
   <cd>Cookin'
      <artist>Miles Davis</artist>
      <price>$7.99</price>
      <track length="5:57">My Funny Valentine</track>
      <track length="9:53">Blues by Five</track>
      <track length="4:22">Airegin</track>
      <track length="13:03">Tune-Up</track>
   </cd>
   <cd>Blue Train
      <artist>John Coltrane</artist>
      <price>$8.99</price>
      <track length="10:39">Blue Train</track>
      <track length="9:06">Moment's Notice</track>
      <track length="7:11">Locomotion</track>
      <track length="7:55">I'm Old Fashioned</track>
      <track length="7:03">Lazy Bird</track>
   </cd>
</specials>

I’m creating an xsl file for it and its only showing the first cd, but its showing it 3 times, also its showing the first track from the first cd 196 times. I’m relatively new to xml but i had about a month break from it so alot of what i learnt is gone. heres what i have in my .xsl file:

<?xml version='1.0' ?>
<xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" version="4.0" />
<xsl:template match="/">
<html>
<head>
   <title>The Jazz Warehouse</title>
</head>
<body>
   <h1>The Jazz Warehouse</h1>
   <table width="600" border="1">
      <xsl:for-each select="//cd">
         <tr>
            <th colspan="2" align="left"><xsl:value-of select="//cd/artist" /> - <xsl:value-of select="//cd" /></th>
         </tr>
         <tr>
            <td><ol>
               <xsl:for-each select="//cd/track">
                  <xsl:apply-templates select="//cd/track" />
               </xsl:for-each>
            </ol></td>
         </tr>
      </xsl:for-each>
   </table>
</body>
</html>
</xsl:template>

<xsl:template match="track">
   <li><xsl:value-of select="//cd/track" /> - <xsl:value-of select="//cd/track/@length" /></li>
</xsl:template>

</xsl:stylesheet>

I cant figure this out, also, i cant get the value of “cd” to display without the value of all the child elements displaying aswell, you should notice it, its in the first cell. Can anybody help me?

Thanks,
Brendan Smith