تغيير لی اوت ، استفاده از چندين تمپليت ، حلقه های تکرار
استفاده از 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/خ