2016-06-09 14 views
0

Ich versuche, eine Liste von Geschäften zuerst nach Provinz und dann nach Stadt zu sortieren. Hier ist ein Beispiel xml:xsl: Eine XML-Datei mit zwei verschiedenen Knoten sortieren

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

konnte ich die Daten erfolgreich nach Stadt sortieren mit diesem Code:

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

Wie würde ich einen Schlüssel zuerst sortieren nach Provinz verwenden, in dem alle Geschäfte in New Brunswick (alphabetisch zuerst nach Stadt dann nach Name) dann Ontario? Oder gibt es einen besseren Weg, dies zu tun, ohne einen Schlüssel zu benutzen? Vielen Dank!

+0

Sie sagen, Sie * sortieren *, aber Sie sind auch * Gruppierung *. Es ist nicht klar, ob Sie auch nach Provinz gruppieren oder nur nach dieser sortieren möchten. Sie können ohne einen Schlüssel sortieren, aber Sie benötigen es, um zu gruppieren. –

+0

Ja, ich möchte sowohl gruppieren als auch sortieren. Also, zuerst gruppieren und sortieren nach Provinz, dann gruppieren und sortieren nach Stadtnamen (innerhalb dieser Provinzgruppen), dann sortieren nach Filialnamen (innerhalb dieser Stadtgruppen) –

Antwort

0

erste Gruppe und sortierte nach Provinz, dann die Gruppe und sortiert nach Stadt Namen (innerhalb dieser Provinz Gruppen), dann schließlich sortiert nach Shopnamen (in diese Stadt Gruppen)

es auf diese Weise versuchen :

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> 

N ote das angenommene stores Wurzelelement.

0

Verwenden Sie zwei xsl: sort-Elemente für den primären bzw. sekundären Schlüssel.

Verwandte Themen