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 进行排序,您可以直接在应用模板中应用排序。

这有效:

 <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

你实际上做错的是这个。您的应用模板正在选择名称元素。您的 xsl:sort 键是 ./name,它是相对于正在排序的节点进行评估的。由于名称元素没有名称子项,因此没有选择任何内容。

但正如 rene 指出的那样,您使用密钥也完全没有必要。

于 2013-03-24T09:44:55.370 回答