<xsl:template match="url">
<a>
<xsl:attribute name="href">
<xsl:value-of select="//url">
"//url" means "All the url elements in the document". So every time you match a URL, you output the values of all the URLs in the document. At least, that's what XSLT 2.0 does. In XSLT 1.0, when xsl:value-of is given a node-set then it outputs the value of the first node in the set.
You want "." here, to mean "the current url element".
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference