私は次の構造を持っています:
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に固執する必要があります-変換するXMLとして、マッパーツールよりもインラインXSLTを使用することを好みますクラブにプレーヤーがいない状況でのnil属性(この状況では1つのクラブがありますが、将来の保証のためにそれを維持しています)
これが私が試したものの大まかなサンプルです:
<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()コマンドが何をしているのか完全にはわかりません。何度も行って変更したので、今は修正する方法がわかりません。誰か助けてもらえますか?