6. XSLT

XSLT KULLANIMI

Html için css ne ise xml için de xslt odur. Ancak xsltye ilaveten bildiğimiz css i de xml üzerinde kullanabiliriz. Peki o zaman neden cssdeğil de xslt’yi kullanırız. Demek ki xslt bize css’e göre bazı avantajlar sunmaktadır. XSLT kullanarak verilere style verirken belli başlı verileri filtreleme veya sıralama şansımız var.

<kitaplar>

  <kitap>
     <isbn>1111</isbn>
     <ad>HTML ve XHTML</ad>
     <yazar>yazar1</yazar>
     <basim_tarihi>AAA</basim_tarihi>
     <sayfa>340</sayfa>
     <fiyat>24</fiyat>
     </kitap>
  <kitap>
     <isbn>2222</isbn>
     <ad>Javascript</ad>
     <yazar>yazar2</yazar>
     <basim_tarihi>2010</basim_tarihi>
     <sayfa>450</sayfa>
     <fiyat>30</fiyat>
  </kitap>
  <kitap>
     <isbn>333</isbn>
     <ad>c#</ad>
     <yazar>yazar3</yazar>
     <basim_tarihi>2012</basim_tarihi>
     <sayfa>550</sayfa>
     <fiyat>45</fiyat>
  </kitap>

</kitaplar>

1. İlk olarak solutionumuza XSLT dosyası ekliyoruz. Aşağıdaki gibi bir dosya içeriğiyle karşılaşacağız.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
 <xsl:output method="xml" indent="yes"/>

   <xsl:template match="@* | node()">
      <xsl:copy>
         <xsl:apply-templates select="@* | node()"/>
       </xsl:copy>
   </xsl:template>

</xsl:stylesheet>

 

2. Aşağıdaki hareket ekleyeceğimiz xsltdeki root elementi seçer.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
 <xsl:output method="xml" indent="yes"/>

<xsl:template match="/">
 
 
 </xsl:template>
</xsl:stylesheet>

3. Daha sonra bu aralıkların içerisine html kodu gömeriz html tagleri verilerin sergileneceği yapıyı oluşturmak için kullanlır.

<xsl:template match="/">
 <html>
   <body>
       <h2>Kitaplar</h2> 
       <table border="1">
           <tr>
 
             <th>ISBN</th>
             <th>AD</th>
             <th>YAZAR</th>
 
           </tr>
 
          <xsl:for-each select="kitaplar/kitap">  //kitaplar taginin altındaki kitap taglerini çek
          <tr>
 
            <td><xsl:value-of select="isbn"/></td>  //her kitap taginin altındaki isbnyi çek
            <td><xsl:value-of select="ad"/></td>   //her kitap taginin altındaki ad çek
            <td><xsl:value-of select="yazar"/></td>   //her kitap taginin altındaki yazar çek
 
          </tr>
          </xsl:for-each> 
 
        </table>
   </body>
 
   </html> 
 
</xsl:template>
</xsl:stylesheet>

<xsl : apply-templates select=”*”></xsl:apply-templates>    //tüm xsl dosyasına style vermek istediğimizi söyler.

DEĞERE GÖRE VERİ ÇEKİP SERGİLEMEK

verilerin hepsini çekmek yerine içerisindeki text verisine göre de secim yapmak isteyebiliriz. Bunun için

1. Katı koşul kullanmak

<xsl:for-each select=”kitaplar/kitap”>   genel dış taginin yerine

<xsl:for-each select=”kitaplar/kitap[yazar=’yazar2′]”> yerleştirmemiz yeterlidir.  Bu durumda yukarıdaki tablonun sadece 2. satırını bize verecektir.

<xsl:for-each select=”kitaplar/kitap[ sayfa>350 ]”>  kitaplar taginin altındaki kitap taginin sayfa taginin değeri 350den büyük olan verileri göster.

2. İf-else kullanmak

<xsl : if test="sayfa &lt; 380"> 
      <td><xsl:value-of select="isbn"/></td>  //her kitap taginin altındaki isbnyi çek
      <td><xsl:value-of select="ad"/></td>   //her kitap taginin altındaki ad çek
      <td><xsl:value-of select="yazar"/></td>   //her kitap taginin altındaki yazar çek
      <td>UCUZ</td>
</xsl:for-each>

VERİLERİ SIRALAMA

<xsl:for-each select="kitaplar/kitap">  //kitaplar taginin altındaki kitap taglerini çek 
<xsl:sort  select="ad" />  //ad verisine göre alfabetik olarak sırala.
<tr> 
      <td><xsl:value-of select="isbn"/></td>  //her kitap taginin altındaki isbnyi çek 
      <td><xsl:value-of select="ad"/></td>   //her kitap taginin altındaki ad çek 
      <td><xsl:value-of select="yazar"/></td>   //her kitap taginin altındaki yazar çek
 </tr> 

</xsl:for-each>