XSLT:用“when test”选择定义的变量

时间:2016-09-15 14:13:55

标签: xml xslt

我试图在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:&#160;<xsl:value-of select="$last"/>&#160;(<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>

它适用于没有保存的游戏(我正在搜索的奇异事件节点)。但是,对于带有保存的游戏,它会在播放器列表中的第一个名称旁边选择适当的保存值,而不是在所选节点正上方的播放器名称。我毫不怀疑我很接近 - 因为它主要起作用 - 但我无法弄清楚如何告诉它选择合适的球员的名字。

感谢。

0 个答案:

没有答案