2016-06-09 91 views
0

我試圖按省份排序,然後按城鎮排序。下面是一個示例XML:xsl:使用2個不同的節點對XML文件進行排序

<store> 
    <name>Duncan's</name> 
    <town>Waterloo</town> 
    <province>Ontario</province> 
</store> 
<store> 
    <name>Anne's</name> 
    <town>Waterloo</town> 
    <province>Ontario</province> 
</store> 
<store> 
    <name>Apple Variety</name> 
    <town>Woodstock</town> 
    <province>Ontario</province> 
</store> 
<store> 
    <name>Goose Market</name> 
    <town>Sackville</town> 
    <province>New Brunswick</province> 
</store> 
<store> 
    <name>Family Market</name> 
    <town>Sackville</town> 
    <province>New Brunswick</province> 
</store> 

我是能夠成功地將數據通過鎮使用此代碼進行排序:

<xsl:key name="towns" match="store" use="town"/> 
<xsl:for-each select="//store[generate-id(.)=generate-id(key('towns', town)[1])]"> 
<xsl:sort select="town"/> 
    <xsl:for-each select="key('towns', town)"> 
     <xsl:sort select="name"/> 
     <xsl:if test="position() = 1"> 
      <h2> 
       <xsl:value-of select="town"/> 
      </h2> 
     </xsl:if> 
    <b> <xsl:value-of select="name"/></b> <br/> 

    <br/> <br/>  
    </xsl:for-each> 
    </xsl:for-each> 

我將如何使用一鍵在前排序省,列出所有門店中新不倫瑞克省(按字母順序排列,然後按名稱排序)然後是安大略省?還是有沒有更好的方法來做到這一點,而不使用密鑰?謝謝!

+0

你說你是*排序*,但你也是*分組*。目前還不清楚你是否也想按省份進行分組,或只是按照省份進行分組。你可以在沒有密鑰的情況下進行排序,但是你需要它來進行分組。 –

+0

是的,我想組和排序。因此,首先按省份排序,然後按城鎮名稱(在這些省份組內)進行分組和排序,然後按商店名稱進行排序(在城鎮組內) –

回答

0

第一組和排序省,然後組和排序鎮名 (這些省組內),然後最後排序店鋪名稱(中 這些城鎮羣)

嘗試這種方式:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:key name="province" match="store" use="province"/> 
<xsl:key name="town" match="store" use="concat(province, '|', town)"/> 

<xsl:template match="/stores"> 
    <xsl:for-each select="store[generate-id()=generate-id(key('province', province)[1])]"> 
     <xsl:sort select="province"/> 
     <h2> 
      <xsl:value-of select="province"/> 
     </h2> 

     <xsl:for-each select="key('province', province)[generate-id()=generate-id(key('town', concat(province, '|', town))[1])]"> 
      <xsl:sort select="town"/> 
      <h3> 
       <xsl:value-of select="town"/> 
      </h3> 
      <xsl:for-each select="key('town', concat(province, '|', town))"> 
       <xsl:sort select="name"/> 
       <xsl:value-of select="name"/> 
       <br/> 
      </xsl:for-each> 
     </xsl:for-each> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

ñ注意假設的stores根元素。

0

分別爲主鍵和輔助鍵使用兩個xsl:sort元素。