Källkoden för /anders.enges/xml/xml18.asp
<!--#include file="../inc/navstuff.asp" -->
<p>Ett dataprogram består i praktiken av tre saker:</p>
<ol>
   <li>Sekvenser - saker som görs i tur och ordning.</li>
   <li>Iterationer - saker som upprepas</li>
   <li>Selektioner - val i programmet.</li>
</ol>
<p>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 ;-)</p>
<h4>Motvarigheten till If </h4>

<%  show "xml18_1.xsl" %>
<%  showLink "xml18_1.xml" %>
<p>Hmm... <b><xsl:if...</b> och <b></xsl:if...</b> kan man lätt acceptera,
   men <b>test=".[code='Min dator']"</b> 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... </p>
<p>Däremot fungerar dessa varianter likadant (i detta fall):</p>
<ul>
   <li><xsl:if test=".[code='Min dator']"></li>
   <li><xsl:if test="code[.='Min dator']"></li>
   <li><xsl:if match=".[code='Min dator']"></li>
</ul>
<p>Punkten förvirrar er säkert (och troligen en hel del annat också)</p>
<h4>Programmeringslogiken i XSL</h4>
<p>Logiken i XSL är inte baserad på den normala booleska logiken som
   finns i t.ex. VB. I VB gör vi <b>jämförelser</b> och kombinerar
   dessa med varandra för att få våra if sater att fungera. I
   XSL används <b>patterns</b> (Jag orkar inte slå upp det svenska ordet.
   Data sker på engelska)</p>
<p>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 ( . )</p>
<p>Detta betyder att <b>.[code='Min dator']</b> skall tolkas som nuvarande nod
   (products/product - punkten) och sedan den nod där <b>code</b> nodens data
   är <b>Min Dator</b>. </p>
<p>Ett exempel:</p>
<p>I VB skulle du skriva någonting i stil med:</p>
<div class="code">For I = 0 to 100<br>
      If I = 30 Then<br>
      doSomething<br>
    End If<br>
   Next </div>
  
<p>och logiken blir ungefär</p>
<div class="res">räkna upp variabeln I från 0 till 100<br>
      om variabeln I:s <b>värde</b> <b>är</b> lika med
   30 så<br>
         gör vi något<br>
       slut på "om:et"<br>
   nästa varv</div>
<p>I XSL skriver vi istället</p>
<div class="code"><xsl:for-each select="products/product"><br>
      <xsl:if test=".[code='Min dator']"><br>
         do something     <br>
      </xsl:if><br>
   </xsl:for-each><br>
</div>
<p>Logiken är har ungefär:</p>
<div class="res">upprepa för varje nod som <b>matchar</b> pattern <b>product/products</b>
   d.v.s. en <b>products</b> nod som har en undernod med namnet <b>product</b><br>
      om nuvarande not <b>matchar </b>den nod som kan <b>beskrivas</b>
   med pattern code='Min Dator' så<br>
         gör vi något   
   <br>
      slut på "om:et"<br>
   nästa varv<br>
</div>
<p>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!</p>
<p>Det är således egentligen inte fråga om en logisk jämförelse,
   utan om en jämförelse mellan patterns.</p>
<h4>Vi kommer oss således inte längre om vi inte kan patterns....</h4>
<p>... och det handlar nästa kapitel om.</p>

<!--#include file="../inc/footer.asp" -->