 Källkoden för /anders.enges/xml/xml18.asp
 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" -->