You say: So I could write this
<tr>
<td><xsl:value-of select ="soccerteam/team/teamid"/></td>
<td><xsl:value-of select="soccerteam/team/@name"/></td>
<td><xsl:value-of select="soccerteam/team/trainer"/></td>
<td>...</td>
</tr>
This leads me to guess that you have one soccerteam element containing many team elements. Yes? (It's poor naming, it would be better to call the outer wrapping element "teams").
Change it to:
<xsl:template match="team">
<tr>
<td><xsl:value-of select="teamid"/></td>
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="trainer"/></td>
<td>...</td>
</tr>
or if you prefer:
<xsl:template match="teams">
<xsl:for-each select="team">
<tr>
<td><xsl:value-of select="teamid"/></td>
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="trainer"/></td>
<td>...</td>
</tr>
Then the last line becomes
<td><xsl:value-of select="document('soccerleague.xml')//team[teamid = current()/teamid]"/></td>
Also, read about xsl:key, which can improve the speed by indexing.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference