Ett dataprogram består i praktiken av tre saker:
  - Sekvenser - saker som görs i tur och ordning.
- Iterationer - saker som upprepas
- 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
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)
Ö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.