XMLXSLProgramkodenxsl:for-each
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Grunderna XSL Dynamiska sidor XML i praktiken

xsl:for-each

xsl:for-each

Syntax:

<xsl:for-each select="pattern" order-by="sorteringskriteria">
      ...
</xsl:for-each>

Sorteringen är inte obligatorisk, men select måste anges.

För select gäller de normala reglerna för patterns, se kapitlet om detta.

För order-by används ett eller flera nodnamn. Använder man flera så skall de separeras med semikolon (;) mellan. Normalt sorteras datat i stigande ordning. Vill man sortera i fallande ordning så sätter man ett - före nodens namn. Man kan äen sätta ett plus (+), men det är inte nödvändigt. Nedan några exempel på detta:

<xsl:for-each select="persons/person" order-by="lastname; firstname">
<xsl:for-each select="persons/person" order-by="lastname; -firstname">

Nedan sorteras förare efter namn

xml23_1.xsl

<?xml version='1.0' encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
   <head><title>Racing</title></head>
   <body bgcolor="#FFFFFF" text="#000000">
     <table>
     <xsl:for-each select="racers/driver" order-by="-name">

       <tr>
      
         <td><xsl:value-of select="name"/></td>
      
         <td><xsl:value-of select="nationality"/></td>
      
         <td><xsl:value-of select="@type"/></td>
      
       </tr>
     </xsl:for-each>
     </table>
   </body>
</html>
</xsl:template>
</xsl:stylesheet>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken

xml23_1.xml

<?xml version="1.0" encoding="iso-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="xml23_1.xsl"?>
<racers>
   <driver type="F1">
     <name>Mika Häkkinen</name>
     <nationality>Finn</nationality>
     <rating>1</rating>
   </driver>
   <driver type="F1">
     <name>David Coulthard</name>
     <nationality>Scottish</nationality>
     <rating>11</rating>
   </driver>
   <driver type="rally">
     <name>Colin McRae</name>
     <rating>3</rating>
   </driver>
   <driver type="rally">
     <name>Marcus Grönholm</name>
     <nationality>Finn</nationality>
     <rating>2</rating>
   </driver>
</racers>
Öppna XML filen   Öppna XML konverterad till HTML (Även NS)

I exemplet nedan så försöker vi sortera förarna efter rating (betyg) men det lyckas inte riktigt bra:

xml23_2.xsl

<?xml version='1.0' encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
   <head><title>Racing</title></head>
   <body bgcolor="#FFFFFF" text="#000000">
     <table>
     <xsl:for-each select="racers/driver" order-by="rating">

       <tr>
      
         <td><xsl:value-of select="name"/></td>
      
         <td><xsl:value-of select="nationality"/></td>
      
         <td><xsl:value-of select="@type"/></td>

         <td><xsl:value-of select="rating"/></td>
      
       </tr>
     </xsl:for-each>
     </table>
   </body>
</html>
</xsl:template>
</xsl:stylesheet>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken

Öppna XML filen   Öppna XML konverterad till HTML (Även NS)

Vi har samma problem som när vi t.ex. görsöker sortera filer vilkas filnamn innehåller siffror. Vi tror att vi sorterar numeriskt, men vi gör en ASCII sortering. Vi måste säga åt XSL tolken att sorteringens skall ske numeriskt. Nedanstående exempel gör detta. Den sorterar även efter namn i fallande ordning (även om det inte har så stor betydelse med vårt testdata):

xml23_3.xsl

<?xml version='1.0' encoding="iso-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
   <head><title>Racing</title></head>
   <body bgcolor="#FFFFFF" text="#000000">
     <table>
     <xsl:for-each select="racers/driver" order-by="number(rating); -name">

       <tr>
      
         <td><xsl:value-of select="name"/></td>
      
         <td><xsl:value-of select="nationality"/></td>
      
         <td><xsl:value-of select="@type"/></td>

         <td><xsl:value-of select="rating"/></td>
      
       </tr>
     </xsl:for-each>
     </table>
   </body>
</html>
</xsl:template>
</xsl:stylesheet>
Om du har IE 5.0 eller nyare kan du klicka här för att se filen i praktiken

Öppna XML filen   Öppna XML konverterad till HTML (Även NS)

 

  xsl:choosexsl:apply-templates
XSL
XSL i praktiken
XSL loopar
XSL programmering
XSL patterns
Patterns exempel
Programkoden
xsl:if
xsl:choose
xsl:for-each
xsl:apply-templates
XSL Övningar
XML versioner
Microsofts lösning
Nummer och datum
Typexempel för XSL ...


Top
< xsl:choose xsl:apply-templates>
© Anders Enges, Vörå 2002  | 04.10.01 19:53 Visa asp koden