0

私は xslt for-each-loop で立ち往生しています。

xml ソース ファイルは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="party.xsl"?>
<party date="31.12.01">
<guest name="Albert">
    <drink>wine</drink>
    <drink>beer</drink>
    <status single="true" sober="false" />
</guest>
<guest name="Martina">
    <drink>apple juice</drink>
    <status single="true" sober="true" />
</guest>
<guest name="Zacharias">
    <drink>wine</drink>
    <status single="false" sober="false" />
</guest>
</party>

次の出力を取得したいと思います。

  • アルバートの飲み物: ワイン , ビール ,
  • マルティナの飲み物:りんごジュース
  • ザカリアの飲み物: ワイン ,

したがって、次の XSLT ファイルを作成しました。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <html>
    <head></head>
    <body bgcolor="white">
        <xsl:for-each select="party/guest">
        <ul><li><b><xsl:value-of select="@name"/></b>
            <xsl:text> drinks: </xsl:text>
            <xsl:value-of select="drink"/>
            <xsl:text>, </xsl:text>
        </li></ul>
        </xsl:for-each>
    </body>
    </html>
</xsl:template>
</xsl:stylesheet>

上記の XSLT ファイルを使用すると、次の出力が得られます。

  • アルバートの飲み物: ワイン,
  • マルティナの飲み物:リンゴジュース、
  • ザカリヤの飲み物: ぶどう酒,

表示されたゲストからすべての飲み物を取得するには、XSLT ファイルをどのように変更する必要がありますか? 協力してくれてありがとうございます!

4

1 に答える 1

1

別のレベルの をネストできます<xsl:for-each select="drink">

ただし、避けることをお勧めし<xsl:for-each>ます。また、1 つの do it all テンプレートにすべてを詰め込まないでください

<xsl:template match="/">
  <html>
    <head></head>
    <body bgcolor="white">
      <xsl:apply-templates select="party" />
    </body>
  </html>
</xsl:template>

<xsl:template match="party">
  <ul>
    <xsl:apply-templates select="guest" />
  </ul>
</xsl:template>

<xsl:template match="guest">
  <li>
    <xsl:value-of select="concat(@name, ' drinks: ')" />
    <xsl:apply-templates select="drink" />
  </li>
</xsl:template>

<xsl:template match="drink">
  <xsl:value-of select="." />
  <xsl:if test="position() &lt; last()">, </xsl:if>
</xsl:template>
于 2013-10-23T11:56:08.617 に答える