我有以下结构:
League
----Clubs
---------Club
-------------Players
--------------------Player
--------------------------FirstName
--------------------------Surname etc
--------------------Player
--------------------------FirstName
--------------------------Surname etc
---------Club
-------------Players
--------------------Player
--------------------------FirstName
--------------------------Surname etc
--------------------Player
--------------------------FirstName
--------------------------Surname etc
无论如何 - 我想在我的 xslt 转换中获取所有玩家的姓名(我使用的是 Biztalk Mapper,所以必须坚持使用 XSLT1 - 我更喜欢使用内联 XSLT 而不是映射器工具,因为我正在转换为期望在俱乐部没有球员的情况下为 nil 属性(在这种情况下只有一个俱乐部,但我也保持这种状态以备将来验证)
这是我尝试过的粗略示例:
<xsl:template name="PlayerNames">
<xsl:element name="ns0:PlayersInLeague">
<xsl:element name="ns0:Team>
<xsl:choose>
<xsl:when test="current()/*[local-name()='Players']/*[local-name()='Player']">
<xsl:for-each select="current()/*[local-name()='Players']/*[local-name()='Player']">
<xsl:element name="ns0:Player"><xsl:value-of select="current()/*[local-name()='FirstName']"/></xsl:element>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="xsi:nil">true</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:element>
</xsl:template>
我想要这样的输出:
PlayersInLeague
- - 团队
------弗雷德
- - - 大卫
----团队 xsi:nil=true
- - 团队
------亚历克斯
------汤姆
从输入
<league>
<clubs>
<club name="London">
<players>
<player>
<firstname>fred</firstname>
</player>
<player>
<firstname>david</firstname>
</player>
</players>
</club>
<club name="Madrid">
<players/>
</club>
<club name="Amsterdam">
<players>
<player>
<firstname>Alex</firstname>
</player>
<player>
<firstname>Tom</firstname>
</player>
</players>
</club>
</clubs>
</league>
我不完全确定 current() 命令在做什么,而且我已经改变了很多次,我现在不知道如何更正它 - 任何人都可以帮忙吗?