9.1 xsl:if ile Koşullu İşlem
<!-- Grubu: yönerge -->
<xsl:if
test = mantıksal-ifade >
<!-- İçeriği: örneklenim -->
</xsl:if>
| eleman |
xsl:if elemanı ifade belirtmekte kullanılan bir test
özniteliğine sahiptir. İfade değerlendirildikten sonra elde edilen sonuç boolean
işlevinin yaptığı gibi bir mantıksal değere dönüştürülür. Eğer sonuç doğruysa, elemanının içeriğindeki örneklenim nesnelleştirilir; aksi takdirde, hiçbir şey yapılmaz. Aşağıdaki örnekte, bir isim grubundaki isimler bir virgül ayraçlı liste haline getirilmektedir:
<xsl:template match="isimlistesi/isim">
<xsl:apply-templates/>
<xsl:if test="not(position()=last())">, </xsl:if>
</xsl:template>
Bu örnekte bir tablonun satırları birer atlayarak sarıya boyanmaktadır:
<xsl:template match="item">
<tr>
<xsl:if test="position() mod 2 = 0">
<xsl:attribute name="bgcolor">yellow</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</tr>
</xsl:template>
9.2 xsl:choose ile Koşullu İşlem
<xsl:when
test = mantıksal-ifade >
<!-- İçeriği: örneklenim -->
</xsl:when>
| eleman |
<xsl:otherwise>
<!-- İçeriği: örneklenim -->
</xsl:otherwise>
| eleman |
xsl:choose elemanı bir miktar olasılık arasından uygun olanını seçer. Bir veya daha fazla sayıda xsl:when elemanı ile varlığı isteği bağlı olan xsl:otherwise elemanını içerebilir. Her xsl:when elemanının bir ifade belirtmekte kullanılan tek bir test
özniteliği vardır. xsl:when ve xsl:otherwise elemanlarının içerikleri birer örneklenimdir. Bir xsl:choose elemanı işleme sokulduğunda, xsl:when elemanlarının içerdiği ifadeler sırayla değerlendirilip elde edilen sonuçlar boolean
işlevinin yaptığı gibi birer mantıksal değere dönüştürülerek denenir. xsl:when elemanlarından doğru sonucu veren ilkinin içeriği nesnelleştirilir, diğerlerine bakılmaz. Eğer hiçbir xsl:when elemanı doğru sonuç vermemişse, xsl:otherwise elemanının içeriği nesnelleştirilir. Eğer hiçbir xsl:when elemanı doğru sonuç vermemişse ve xsl:otherwise elemanı da yoksa hiçbir nesnelleştirme yapılmaz.
Aşağıdaki örnekte, alt listeleri de olan sıralı bir listenin üyeleri, alt liste derinliğine bağlı olarak arap rakamları, harfler ve yunan rakamları kullanılarak numaralanmaktadır:
<xsl:template match="orderedlist/listitem">
<fo:list-item indent-start='2pi'>
<fo:list-item-label>
<xsl:variable name="level"
select="count(ancestor::orderedlist) mod 3"/>
<xsl:choose>
<xsl:when test='$level=1'>
<xsl:number format="i"/>
</xsl:when>
<xsl:when test='$level=2'>
<xsl:number format="a"/>
</xsl:when>
<xsl:otherwise>
<xsl:number format="1"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text>. </xsl:text>
</fo:list-item-label>
<fo:list-item-body>
<xsl:apply-templates/>
</fo:list-item-body>
</fo:list-item>
</xsl:template>