استفاده از XSLT در برنامه های وب (2)






تغيير لی اوت ، استفاده از چندين تمپليت ، حلقه های تکرار

استفاده از XSL دارای مزايای متعددی است :
• امکان تغيير موقعيت عناصر ( لی اوت صفحه ) در فايل XSL ، بدون نياز به تغيير داده ، فراهم می گردد .
• امکان انجام عمليات منطقی بر روی داده نظير پردازش های تکراری و شرطی ، فراهم می گردد.
در ادامه به تشريح مزايای فوق ، خواهيم پرداخت .

تغيير Layout

يکی از پتانسيل های بسيار مهم XSL ، قابليت تغيير Layout نحوه نمايش عناصر با توجه به اهداف مورد نظر می باشد . در فايل های HTML با توجه به اينکه داده و نحوه نمايش آنان ، در يک فايل مشخص می گردد، همواره يک خروجی يکسان را شاهد خواهيم بود . همزمان با ارسال اطلاعات ، تگ های لازم که مسئوليت تبين رفتار مرورگر به منظور نحوه نمايش عناصر را برعهده دارند ، نيز ارسال و مرورگر بلافاصله پس از تفسيرآنان ، واکنش های کاملا" از قبل تعريف شده ای را به منظور نمايش اطلاعات ، انجام خواهد داد . در صورتيکه قصد مشاهده ، دو layout مجزاء از يک فايل HTML را داشته باشيم ، می بايست از دو فايل جداگانه که هرکدام اهداف خاص خود را دنبال خواهند نمود ، استفاده گردد. در فايل های XML با توجه به اينکه داده از نمايش تفکيک شده است ، ،می توان دستورالعمل های لازم به منظور نمايش اطلاعات را ايجاد و پس از ذخيره آنان در يک فايل XSL ( با توجه به Layout مورد نظر) ، داده های موجود در يک فايل XML را با حالات متفاوت ، مشاهده نمود. با بکارگيری صحيح عناصر در XSL ، امکان تغيير Layout فراهم می گردد.
مثال يک :
هدف : نمايش اطلاعات موجود در فايل XML حاوی اطلاعات دانشجويان با يک فرمت خاص ( جدول ) .
توضيحات : در مثال فوق ، از فايل XML نمونه ( موجود در بخش اول مقاله ) بهمراه فايل XSL زير استفاده می شود .

 XSLT File

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Students/Student">
<html>
<body Dir="rtl">
<H3 Align="Center"> ليست دانشجويان</H3>
<table border="1" bgcolor="White" dir="rtl" Align="Center">
<tr>
<th bgcolor="#336699"><font size="3" color="white"> نام</font> </th>
<th bgcolor="#336699"><font size="3" color="white"> نام خانوادگی</font> </th>
<th bgcolor="#336699"><font size="3" color="white"> رشته</font> </th>
</tr>
<tr>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Fname"/></font></td>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Lname"/></font></td>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Study"/></font></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


خروجی : پس از مقداردهی خصلت های DocumentSource و TransformSource کنترل سرويس دهنده XML ، به ترتيب به فايل های XML و XSL ، خروجی زير نمايش داده می شود .

استفاده از چندين تمپليت ها

يک فايل XSL ، می تواند شامل چندين تمپليت باشد يک تمپليت XSL برای هر يک از گره های XML که قصد ارائه فرمت مشابه و يکسانی را برای آنان داريم ، بکار گرفته می شود . .در فايل XML مربوط به دانشجويان می توان (بعنوان نمونه ) ، دو تمپليت را ايجاد که هر يک مسئوليت تعريف فرمت نحوه نمايش بخش خاصی از فايل XML را بر عهده خواهند گرفت .
• تمپليت اصلی ، مسئوليت تعريف فرمت مناسب به منظور نمايش Fname,Lname و Study ( سه عنصر از فايل XML دانشجويان ) را بر عهده داشته و عملا" نقطه شروع کار را مشخص می نمايد(اجرای XSL از تمپليت فوق ، آغاز می گردد) .
• تمپليت Address ، مسئوليت تعريف فرمت مناسب به منظور نمايش آدرس دانشجويان را برعهده دارد .
با استفاده از عنصر xsl:apply-template ، می توان يک تمپليت را در ارتباط با يک گره بکار گرفت . XSL زير ، نحوه استفاده از دو تمپليت و ارتباط بين هر يک از آنان را نشان می دهد . ( نحوه ارتباط دو تمپليت با رنگ آبی مشخص شده است ) .

XSLT File with two template

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Students/Student">
<html>
<body Dir="rtl">
<H3 Align="Center"> ليست دانشجويان</H3>
<table border="1" bgcolor="ٌWhite" dir="rtl" Align="Center">
<tr>
<th bgcolor="#336699"><font size="3" color="white"> نام</font> </th>
<th bgcolor="#336699"><font size="3" color="white"> نام خانوادگی</font> </th>
<th bgcolor="#336699"><font size="3" color="white"> رشته</font> </th>
</tr>
<tr>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Fname"/></font></td>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Lname"/></font></td>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Study"/></font></td>
</tr>
<xsl:apply-templates select="/Students/Student/Address" />
</table>
</body>
</html>
</xsl:template>
<xsl:template match="/Students/Student/Address">
<tr>
<td bgcolor="Green" width="100%" colspan="3" align="center" dir="rtl">
<font size="3" color="white"> آدرس دانشجو</font> </td>
</tr><tr>
<td bgcolor="White" width="100%" colspan="3" dir="rtl">
<ul Align="Right">
<li><B>آدرس منزل</B> :<xsl:value-of select="/Students/Student/Address/Home" /></li><br/>
<li><B>آدرس محل کار</B> :<xsl:value-of select="/Students/Student/Address/Office" /></li><br/>
<li><B>آدرس پست الکترونيکی</B> :<xsl:value-of select="/Students/Student/Address/Email" /></li><br/>
</ul>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>


مثال دو :
هدف : استفاده از دو تمپليت در فايل XSL به منظور نمايش اطلاعات دانشجويان
توضيحات : دراين مثال از فايل XML زير و فايل XSL فوق ، استفاده شده است .

Student XML file

<?xml version="1.0" encoding="utf-8" ?>
<Students>
<Student>
<Gender>مرد</Gender>
<Fname>محمدرضا</Fname>
<Lname>ايرانی</Lname>
<Study>فنآوریاطلاعات و ارتباطات</Study>
<Address>
<Home>هموارهسبز</Home>
<Office>شاداب</Office>
<Tel>
<TelHome></TelHome>
<TelOffice></TelOffice>
</Tel>
<Email>Info@Srco.ir</Email>
</Address>
<Marks>
<Quiz>
<Q1></Q1>
<Q2></Q2>
<Q3></Q3>
</Quiz>
<MidTerm></MidTerm>
<Final></Final>
</Marks>
</Student>
</Students>


خروجی : پس از مقداردهی خصلت های DocumentSource و TransformSource کنترل سرويس دهنده XML ، به ترتيب به فايل های XML و XSL ، خروجی زير نمايش داده می شود .

تمپليـت استفاده شده در فايل XSL ، صرفا" يک گره را پردازش نموده و در صورت نياز به تکرار عمليات ( نمايش اطلاعات چندين دانشجو ) ، می بايست از عناصر تکرار XSL استفاده گردد.

تکرار عمليات

به منظور اعمال فرمت مورد نظر در ارتباط با چندين عنصر در يک فايل XML نظير يک ليست و يا آيتم های يک جدول ، از xsl:for-each استفاده می شود. عنصر فوق ، با ايجاد يک حلقه تکرار ، گره های مورد نظر را انتخاب و در ادامه محتوی XSL در ارتباط با هر يک از گره ها ، بکار گرفته می شود .

 Repeating elements

<xsl : for-each select = "/Students/Student" >
<xsl : value-of select="Fname" /><br/>
</xsl:for-each>


مثال سه :
هدف : استفاده از عنصر xsl:for-each به منظور نمايش اطلاعات چندين دانشجو
توضيحات : درمثال فوق ، از فايل XSL زير استفاده شده است ( فايل XML حاوی اطلاعات دو دانشجو می باشد ) .

 XSLT File

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body Dir="rtl">
<H3 Align="Center"> ليست دانشجويان</H3>
<table border="1" bgcolor="ٌWhite" dir="rtl" Align="Center">
<tr>
<th bgcolor="#336699"><font size="3" color="white"> نام</font> </th>
<th bgcolor="#336699"><font size="3" color="white"> نام خانوادگی</font> </th>
<th bgcolor="#336699"><font size="3" color="white"> رشته</font> </th>
</tr>
<xsl:for-each select="/Students/Student" >
<tr>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Fname"/></font></td>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Lname"/></font></td>
<td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="Study"/></font></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


خروجی : پس از مقداردهی خصلت های DocumentSource و TransformSource کنترل سرويس دهنده XML ، به ترتيب به فايل های XML و XSL ، خروجی زير نمايش داده می شود .

منبع:http://article.mjsoft.ir