XMLXSLXSL programmering
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Grunderna XSL Dynamiska sidor XML i praktiken

XSL programmering

Ett dataprogram består i praktiken av tre saker:

  1. Sekvenser - saker som görs i tur och ordning.
  2. Iterationer - saker som upprepas
  3. Selektioner - val i programmet.

Vi har redan sett sekvenser. HTML koden i XSL filen kan betraktas som sekvens. I det första exemplet radades dessutom upp ett antal värden. Iterationer (loopar) såg vi i föregående kapitel. Kvar blir då bara selektioner (och allt annat ;-)

Motvarigheten till If

xml18_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>TITEL</title>
     <style type="text/css">
       h4
       {
         font-family:verdana,arial,sans-serif;
         color:#666666;
       }
     </style>
   </head>
   <body bgcolor="#FFFFFF" text="#000000">
     <h4>En TestSida</h4>
     <xsl:for-each select="products/product">

       <!--  nytt -->
       <xsl:if test=".[code='Min dator']">
         <b>Min: </b>
         <hr />
       </xsl:if>
       <!--  slut på nytt -->

       <xsl:value-of select="code"/> <br />
       <xsl:value-of select="price"/> <br />
       <xsl:value-of select="amount"/> <br />
     </xsl:for-each>
   </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)

Hmm... <xsl:if... och </xsl:if... kan man lätt acceptera, men test=".[code='Min dator']" kan vara lite svårare att svälja. Det är fullt möjligt att skriva <xsl:if code='Min dator'>, men resultatet blir inte alls det du tror...

Däremot fungerar dessa varianter likadant (i detta fall):

  • <xsl:if test=".[code='Min dator']">
  • <xsl:if test="code[.='Min dator']">
  • <xsl:if match=".[code='Min dator']">

Punkten förvirrar er säkert (och troligen en hel del annat också)

Programmeringslogiken i XSL

Logiken i XSL är inte baserad på den normala booleska logiken som finns i t.ex. VB. I VB gör vi jämförelser och kombinerar dessa med varandra för att få våra if sater att fungera. I XSL används patterns (Jag orkar inte slå upp det svenska ordet. Data sker på engelska)

De som arbetat med Linux, mer avancerad HTML eller DOS känner igen punkten i ovanstående is exempel. Den betecknar nuvarande nod. Man måste ange pattern eller sätta en punkt ( . )

Detta betyder att .[code='Min dator'] skall tolkas som nuvarande nod (products/product - punkten) och sedan den nod där code nodens data är Min Dator.

Ett exempel:

I VB skulle du skriva någonting i stil med:

For I = 0 to 100
   If I = 30 Then
      doSomething
    End If
Next

och logiken blir ungefär

räkna upp variabeln I från 0 till 100
   om variabeln I:s värde är lika med 30 så
      gör vi något
    slut på "om:et"
nästa varv

I XSL skriver vi istället

<xsl:for-each select="products/product">
   <xsl:if test=".[code='Min dator']">
      do something    
   </xsl:if>
</xsl:for-each>

Logiken är har ungefär:

upprepa för varje nod som matchar pattern product/products d.v.s. en products nod som har en undernod med namnet product
   om nuvarande not matchar den nod som kan beskrivas med pattern code='Min Dator' så
      gör vi något   
   slut på "om:et"
nästa varv

Nu kanske du tycker att detta är hårklyveri över svenska språkets betydelse, men de två ovanstående exempelkodernas betydelse är inte samma. Fundera en stund på vilka skillnader det finns i beskrivningarna!

Det är således egentligen inte fråga om en logisk jämförelse, utan om en jämförelse mellan patterns.

Vi kommer oss således inte längre om vi inte kan patterns....

... och det handlar nästa kapitel om.

  XSL looparXSL patterns
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 loopar XSL patterns>
© Anders Enges, Vörå 2002  | 04.10.01 17:46 Visa asp koden