Performance obviously depends on the product, but in this case I think it's clear cut: use the select attribute. That directly concatenates strings. The other approach creates a document node having multiple text nodes as its children, only to extract the string value of the document node when it's used as a string. One of my pet hates is
<xsl:variable name="x">
<xsl:value-of select="some string"/>
</xsl:variable>
partly because it's three lines of code instead of one, and partly because it's three times slower.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference