I am trying to list out the name of the first team in each series
Using a key is an unnecessary complication for such a simple task. Try simply:
<xsl:template match="/">
<xsl:for-each select="ws/series">
<xsl:value-of select="team[1]/@name" />
</xsl:for-each>
</xsl:template>
Of course, you will want to add some kind of wrapper or separator to this, otherwise you'll just get a jumble of all names - say (assuming the output method is text):
<xsl:template match="/">
<xsl:for-each select="ws/series">
<xsl:value-of select="team[1]/@name" />
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
EDIT:
To do this (artificially) using a key, you must ask yourself what is connecting a team to its series (other than being a child thereof). The answer here is 'nothing'. However, a team has access to its parent series data. Therefore we could identify a team by some attribute of its parent series, such as the year or the MVP. The MVP might not be unique to the series, so let's make the key:
<xsl:key name="team-by-year" match="team" use="parent::series/@year" />
This says: if you tell me the year, I'll tell you the teams that played in the series of that year. So from here, it's simply a matter of calling a key with the current series' year:
<xsl:template match="/">
<xsl:for-each select="ws/series">
<xsl:value-of select="key('team-by-year', @year)[1]/@name" />
<xsl:if test="position()!=last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>