2013-03-23 125 views
2

我想排序顯示在列表中的所有演員名稱。必須有一些簡單的東西我失蹤了,但我無法弄清楚它是什麼。XSLT排序元素不起作用

<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> 

回答

3

你並不需要一個xsl:鍵排序,可以直接應用在應用模板的sort

這工作:

<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> 
+0

謝謝你的回覆,rene。但是,我將如何將它應用於我的特殊情況,因爲我正在使用「apply-templates select =」$ actorNames [generate-id()= generate-id(key('kName',。)[1])]「」 ?我已經用你的解決方案更新了我的文章,但由於某種原因,它仍然不起作用 – Alex 2013-03-23 15:01:41

+0

我還爲你實施該方法的方式添加了一個選項 – rene 2013-03-23 15:09:37

+0

這很完美,謝謝你的幫助,rene! – Alex 2013-03-23 15:11:18

1

什麼你實際上在做錯誤的是這樣的。你的應用模板是選擇名稱元素。您的xsl:sort關鍵字是./name,它是相對於正在排序的節點計算的。由於名稱元素沒有名稱子元素,因此沒有選擇任何元素。

但正如rene指出的那樣,您使用密鑰也是不必要的。

+0

謝謝澄清這,邁克爾。我使用的鍵來選擇獨特的元素值,因爲我已經在我的其他問題發佈。[鏈接](http://stackoverflow.com/questions/15455618/select-unique-element-values-based-on -the-attribute-with-xpath-1-0)。所以我不得不使用鍵,但我也想排序這些獨特的元素值。 – Alex 2013-03-25 21:47:36