2

リストに表示されているすべての俳優名を並べ替えようとしています。私が見逃している単純なものがあるに違いありませんが、それが何であるかわかりません。

    <xsl:key name="kName" match="actor/name" use="." />

    <xsl:template match="/">
    <xsl:element name="html">
        <xsl:element name="head">
            <xsl:element name="title">
                <xsl:text>Actors list</xsl:text>
            </xsl:element>
            <xsl:element name="h2">Actors list</xsl:element>
        </xsl:element>
        <xsl:element name="body">
            <xsl:variable name="actorNames" select="/movies/movie/cast/actors/actor/name"/>
            <xsl:apply-templates select="$actorNames[generate-id() = generate-id(key('kName', .)[1])]">
                <xsl:sort select="./name"/>
            </xsl:apply-templates>
        </xsl:element>
    </xsl:element>
</xsl:template>

<xsl:template match="name">
      <xsl:element name="a">
          <xsl:attribute name="href">actor_details.php?movieID=<xsl:value-of select="../../../../@movieID"/>&amp;actorID=<xsl:value-of select="../@actorID"/></xsl:attribute>
              <xsl:value-of select="." />
      </xsl:element>
      <xsl:element name="br" />
</xsl:template>
4

2 に答える 2

3

並べ替えに xsl:key は必要ありません。apply -templates で並べ替えを直接適用できます。

これは機能します:

 <xsl:key name="kName" match="actor/name" use="." />

 <xsl:template match="/">
    <xsl:element name="html">
      <xsl:element name="head">
        <xsl:element name="title">
          <xsl:text>Actors list</xsl:text>
        </xsl:element>
        <xsl:element name="h2">Actors list</xsl:element>
      </xsl:element>
      <xsl:element name="body">

        <!-- your way -->
        <xsl:variable name="actorNames" select="/movies/movie/cast/actors/actor/name"/>
        <xsl:apply-templates select="$actorNames[generate-id() = generate-id(key('kName', .)[1])]">
           <xsl:sort select="."/>
        </xsl:apply-templates>

        <!-- my way -->
        <xsl:apply-templates select="movies/movie/cast/actors/actor">
          <xsl:sort select="./name"/>
        </xsl:apply-templates>

      </xsl:element>
    </xsl:element>
  </xsl:template>
于 2013-03-23T14:51:18.190 に答える
1

あなたが実際に間違っていたのはこれでした。apply-templates は name 要素を選択していました。xsl:sort キーは ./name で、ソートされるノードに関連して評価されます。name 要素には名前の子がないため、これは何も選択していませんでした。

しかし、rene が指摘したように、キーの使用もまったく不要です。

于 2013-03-24T09:44:55.370 に答える