我试图在20个左右的列表中为播放器(父节点)选择一个定义的变量(姓氏为$ last),在测试中寻找特定子节点的存在。每个XML只能有一个此子节点的实例。
以下是源代码的摘录:
<player name="FOX, Mason" shortname="FOX, Mason" uni="2" gp="1" gs="1" spot="1" code="1" bats="R" throws="R" class="FR" pos="cf" atpos="cf" playerId="e5e9a2dh92nl74wn">
<hitting r="0" h="0" ab="3" rbi="0" bb="1" so="2" fly="1" kl="1" hitdp="1"></hitting>
<fielding po="1" a="0" e="0"></fielding>
....
<player name="SELLERS, Wil" shortname="SELLERS, Wil" uni="24" gp="1" sub="1" spot="10" code="0" bats="R" throws="R" class="SO" pos="p" atpos="p" playerId="21jhmtg1nlxdrwda">
<hitting r="0" h="0" ab="0" rbi="0"></hitting>
<fielding po="1" a="0" e="0"></fielding>
<hsitsummary></hsitsummary>
<pitching appear="2" ip="4.0" ab="13" bb="2" bf="15" fly="1" ground="4" h="1" so="7" save="1"></pitching>
<psitsummary fly="1" ground="4" picked="0" leadoff="0,4" wrunners="0,3" vsleft="1,6" w2outs="0,4"></psitsummary>
<fsituation po="1"></fsituation>
</player>
这是我提出的代码。
<Save>
<xsl:for-each select="player">
<xsl:variable name="full_name" select="@name"/>
<xsl:variable name="first" select="substring-after($full_name, ',')"/>
<xsl:variable name="last" select="substring-before($full_name, ',')" />
<xsl:choose>
<xsl:when test="pitching/@save">
<name_tag>SV: <xsl:value-of select="$last"/> (<xsl:value-of select="pitching/@save"/>)</name_tag>
</xsl:when>
<xsl:otherwise>
<xsl:text>SV: None</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</Save>
它适用于没有保存的游戏(我正在搜索的奇异事件节点)。但是,对于带有保存的游戏,它会在播放器列表中的第一个名称旁边选择适当的保存值,而不是在所选节点正上方的播放器名称。我毫不怀疑我很接近 - 因为它主要起作用 - 但我无法弄清楚如何告诉它选择合适的球员的名字。
感谢。