1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

استفاده از xslt در برنامه های وب (بخش اول) - جايگاه xslt به منظور فرمت دهی خروجی برنامه های وب

شروع موضوع توسط ♥ yakamoz ♥ ‏22/8/11 در انجمن Html

  1. کاربر ویژه

    تاریخ عضویت:
    ‏25/11/10
    ارسال ها:
    8,717
    تشکر شده:
    4,395
    امتیاز دستاورد:
    123
    حرفه:
    Telegram: vahid_yakamoz instagram: vahid_yakamoz
    ايجاد خروجی مناسب و با فرمت مطلوب ، از جمله اهداف مهم در تمامی برنامه های کامپيوتری است. برنامه های وب نيز از ايـن قاعده مستثنی نبوده و طراحان و پياده کنندگان اين نوع از برنامه ها ، با بهره گيری از امکانات و تکنولوژی های متفاوت سعی در ارائه خروجی مناسب و با فرمت قابل قبول برای مخاطبان خود می نمايند. خروجی يک برنامه وب ، در سطح سرويس گيرندگان ارائه می گردد ، بديهی است به منظور فرمت مناسب خروجی برنامه های وب ، می بايست بر تکنولوژی هائی متمرکز گرديد که امکان بکارگيری آنان در سطح سرويس گيرنده و از طريق مرورگر کاربران ، ميسر می باشد . مسئوليت ميزبان نمودن بخش رابط کاربر برنامه های وب برعهده مرورگر بوده و لازم است تمامی تلاش های انجام شده در اين خصوص با تاکيد بر اهميت و جايگاه مرورگر ها ، سازماندهی و مديريت گردد . ASP.NET ( پلات فرم دات نت برای ايجاد برنامه های وب ) ، از دو روش عمده در ارتباط با ايجاد فرمت مناسب خروجی ( Formatting)برای برنامه های وب ، استفاده می نمايد :
    <LI dir=rtl>استفاده از CSS . از تکنولوژی CSS)Cascading style sheet) ، به منظور کنترل شکل ظاهری عناصر موجود بر روی يک فرم وب استفاده می گردد . از امکانات CSS ، می توان در جهت تنظيم رنگ ، اندازه ، فونت و رفتار عناصر HTML موجود بر روی يک صفحه وب استفاده نمود .
    استفاده از XSLT . از تکنولوژی XSLT)Extensible Stylesheet Language Transformation ) ، به منظور تبديل اطلاعات يک فايل XML به خروجی HTML و استقرار اطلاعات فوق بر روی يک فرم وب ، استفاده می گردد . XSLT ، داده مورد نياز را از فايل XML دريافت و پس از تبديل آنان به عناصر HTML ، سبک های ( Styles ) مشخص شده را در رابطه با هر يک از عناصر بکار می گيرد .
    در اين مقاله به بررسی نحوه استفاده از XSLT ، به منظور تعريف فرمت خروجی برنامه های وب، خواهيم پرداخت .
    XSLT ، از کنترل سرويس دهنده XML به منظور ايجاد فرمت خروجی يک فايل XML ( ورودی ) با استفاده از مجموعه قوانين ذخيره شده در يک فايل XSL ، استفاده می نمايد . فايل XSL ، مشابه فايل CSS است که در مقاله "استفاده از CSS در برنامه های وب دات نت " با آن آشنا شديم .فايل XSL ، قوانين formatting لازم به منظور ايجاد خروجی مناسب در يک فرم وب را ارائه می نمايد . برخلاف فايل های CSS ، يک فايل XSL قادر به استقرار عناصر در هر مکانی بر روی يک فرم وب بوده و همچنين امکان انجام عمليات منطقی نظير فرآيندهای تکرار و شرطی نيز به کمک آن ميسر می گردد. فايل های XSL را می توان بمنزله يک لايه هوشمند فرمت دهی در نطر گرفت که مکمل فايل های CSS می باشند ( نه جايگزين آنان ) . در چنين مواردی می توان ساختار داده موردنظر جهت استقرار بر روی يک فرم وب را با استفاده از XSL ، مشخص واز CSS به منظور تعريف شکل ظاهری عناصر تعريف شده در لی اوت مورد نظر،استفاده نمود .
    برای استفاده از XSLT در يک فرم وب ، مراحل زير را دنبال می نمائيم :

    افزودن يک کنترل سرويس دهنده XML به يک فرم وب ( استفاده از Toolbox در محيط ويژوال استوديو دات نت )
    http://www.srco.ir/Articles/images/WebXSLT0.jpg
    <LI dir=rtl>مقداردهی مناسب خصلت DocumentSource کنترل سرويس دهنده XML به فايل XML
    مقداردهی مناسب خصلت TransformSource کنترل سرويس دهنده XML به فايل XSL که از آن بمنظور فرمت دهی خروجی ، استفاده می گردد .
    http://www.srco.ir/Articles/images/WebXSLT01.jpg
    شکل زير ، فرم وب را پس از استقرار يک کنترل سرويس دهنده XML بر روی آن ، نشان می دهد.
    http://www.srco.ir/Articles/images/WebXSLT02.jpg
    در زمان اجراء ، کنترل سرويس دهنده XML ، ورودی XML را با استفاده از اطلاعات موجود در فايل XSL به منظور توليد فرمت مناسب خروجی ، پردازش می نمايد .
    http://www.srco.ir/Articles/images/webXSLT1.jpg
    ايجاد يک فايل XML

    فايل های XML ، روشی بمنظور تشريح ساختار داده بصورت متن می باشند .
    XML به منظور مشخص نمودن عناصر داده از تگ <element > ... < /element> استفاده می نمايد ( مشابه HTML ) . فايل های XML بر خلاف فايل های HTML از مجموعه قوانين خاصی ، تبعيت می نمايند :
    <LI dir=rtl>هر آيتم ، می بايست دارای يک تگ شروع و يک تگ پايان باشد . در فايل های HTML برخی از تگ ها نظير : <br> و <li> می توانند بدون تگ پايانی ( < br> ، <li> ) استفاده گردند . در فايل های XML ، چنين عملياتی مجاز نمی باشد .
    <LI dir=rtl>اسامی تگ ها ، نسبت به حروف بزرگ و کوچک حساس می باشد . در فايل های HTML ، تگ های <P> و <p> ، معادل يکديگر بوده و در اين رابطه مرورگر خطائی را ارائه نمی نمايد. در فايل های XML ، تگ های فوق بعنوان دو تگ مجزا در نظر گرفته می شوند.
    <LI dir=rtl>مقادير نسبت داده شده به خصلت های هر تگ ، می بايست محصور بين علامت " " باشد ( Double quotation ) . در فايل های HTML ، می توان علامت کوتيشن را برای خصلت هائی که از نوع عددی می باشند ، حذف نمود ( نظير : <table cols=3> . در فايل های XML ، می بايست همواره از Double quotation استفاده شود ( نظير : <"table cols="3 > ) .
    آيتم های تودرتو ، می بايست با انظباط خاصی خاتمه يابند . در فايل های HTML استفاده از تگ هائی بصورت زير مجاز می باشد :
    Nested Item in HTML File
    <b>Bold text <i> italic bold </b>regular italic</i>

    در فايل های XML چين عملياتی مجاز نخواهد بود و می بايست تگ <i> قبل از تگ <b> بسته شود .
    Nested Item in XML File
    <b>Bold text <i> italic bold </i></b><i>regular italic</i>

    مجموعه قوانين فوق، نشاندهنده وجود پتانسيل های مهمی در فايل های XML نسبت به فايل های HTML بوده و کاربران می توانند تگ های اختصاصی و دلخواه خود را تعريف نمايند.
    بمنظور ايجاد يک فايل XML در ويژوال استوديو دات نت ، گزينه Add New Item را از طريق منوی Project انتخاب و در ادامه از طريق ليست Template ، گزينه XML file را انتخاب می نمائيم .
    مرحله اول
    مرحله دوم
    http://www.srco.ir/Articles/images/webXSLT2.jpghttp://www.srco.ir/Articles/images/webXSLT3.jpg


    به منظور صرفه جوئی در زمان ايجاد و اشکال زدائی يک فايل XML ، شايسته است که در ابتدا ساختار سند XML مشخص و پس از تعريف تگ های مورد نظر ، اقدام به ايجاد آن با استفاده از امکانات ويژوال استوديو دات نت ، نمود. XMLFile1 ، يک فايل نمونه XML است که با توجه به ساختار تعريف شده ، اطلاعات دانشجويان را در خود ذخيره می نمايد( نام و نام خانوادگی ، جنسيت ، رشته تحصيلی ، آدرس منزل و ... )
    Student XML file:XMLFile1
    <?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></Email>
    </Address>
    <Marks>
    <Quiz>
    <Q1></Q1>
    <Q2></Q2>
    <Q3></Q3>
    </Quiz>
    <MidTerm></MidTerm>
    <Final></Final>
    </Marks>
    </Student>
    </Students>

    داده مربوط به هر يک از آيتم ها بين تگ های شروع و پايان قرار می گيرد. ساختار فايل و اسامی عناصری است که به نوعی محتويات يک المان را تشريح می نمايند، از نکات مهم يک فايل XML محسوب می گردد( به غير از فرمت دهی ) . ساختار XML بصورت سلسه مراتبی بوده و به هر آيتم موجود در ساختار فوق ، با نام "گره " ( Node ) ، مراجعه می گردد . گره ها دارای ارتباطات از نوع Parent-child بوده که با استفاده از XPath)XML Path Language) ،مشخص می گردند ( نظير آدرس دهی يک فولدر ) .
    ايجاد يک فايل XSL

    فايل XSL ، مسئوليت ارائه Layout و منطق لازم به منظور تبديل داده ذخيره شده در فايل XML به خروجی مورد نظر را برعهده دارد. به منظور ايجاد يک فايل XSL در ويژوال استوديو دات نت ، گزينه Add New Item را از طريق منوی Project انتخاب و در ادامه از طريق ليست Template ، گزينه XSL file را انتخاب می نمائيم .
    فايل XSL ، شامل عبارات تمپليتی است که آيتم های مورد نظر ورودی از فايل XML را شامل می شود . هر تمپليت ، شامل عناصر استاندارد HTML است که به منظور فرمت دهی عناصر ورودی از فايل XML استفاده می گردد .تمپليت XSL زير ، عناصر Fname،Lname و Study را از فايل XMLFile1 به عنصر h3 در HTML تبديل می نمايد .

    XSLT File :XSLTFile1
    <?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">
    <xsl:apply-templates select="Student"/>
    <h2 dir="rtl" align="center"><xsl:text>مشخصات دانشجويان</xsl:text></h2>
    <hr/>
    <h3 dir="rtl"><xsl:value-of select="Fname"/></h3>
    <h3 dir="rtl"><xsl:value-of select="Lname"/></h3>
    <h3 dir="rtl"><xsl:value-of select="Study"/></h3>
    </xsl:template>
    </xsl:stylesheet>

    درمثال فوق از عناصر و خصلت های XSL زير، استفاده شده است :
    <LI dir=rtl>عنصر xsl:stylesheet
    خصلت version : نسخه استفاده شده XSL را مشخص می نمايد( نسخه يک ، آخرين نسخه موجود می باشد ) .
    خصلت xmlns:xsl : پيشوند عناصر موجود در فايل XSL را مشخص می نمايد .
    <LI dir=rtl>عنصر xsl:template
    خصلت match : يک تمپليت برای يک گره XML را تعريف می نمايد .
    <LI dir=rtl>عنصر xsl:apply-templates
    خصلت select : يک تمپليت را دررابطه با گره انتخاب شده ، بکار می گيرد .
    <LI dir=rtl>عنصر xsl:value-of
    خصلت select : بازيابی مقدار يک گره XML و يا بررسی يک عبارت XPath را انجام می دهد .
    عنصر xsl:text . متن و يا فضای خالی مورد نظررا در خروجی نمايش می دهد .
    شکل زير نحوه عملکرد عناصر فوق بمنظور تبديل داده XML را از طريق کنترل سرويس دهنده XML نشان می دهد( استفاده از فايل های XMLFile1 و XSLTFile1 ) .
    http://www.srco.ir/Articles/images/WebXSLT4.jpg
    عناصرXSL استفاده شده در مثال فوق ، حداقل عمليات لازم به منظور نمايش داده را شامل می شود : تعريف يک تمپليت ، درج داده درون تمپليت ، نمايش مقادير مورد نظر از فايل XML و درج متن . عمليات فوق را می توان با بکارگيری عناصر HTML معمولی و Style sheet نيز انجام داد. استفاده از XSL مزايای متعددی را بدنبال داشته که به دو مورد آن اشاره می شود :
    <LI dir=rtl>امکان تغيير موقعيت عناصر ( لی اوت صفحه ) در فايل XSL ، بدون نياز به تغيير داده ، فراهم می گردد .
    امکان انجام عمليات منطقی بر روی داده نظير پردازش های تکراری و شرطی ، فراهم می گردد.
     
  2. کاربر ویژه

    تاریخ عضویت:
    ‏25/11/10
    ارسال ها:
    8,717
    تشکر شده:
    4,395
    امتیاز دستاورد:
    123
    حرفه:
    Telegram: vahid_yakamoz instagram: vahid_yakamoz
    پاسخ : استفاده از xslt در برنامه های وب (بخش اول) - جايگاه xslt به منظور فرمت دهی خروجی برنامه های و

    • استفاده از xslt در برنامه های وب (بخش دوم) - تغيير لی اوت ، استفاده از چندين تمپليت ، حلقه های تکرار




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

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

    مثال يک :

    هدف : نمايش اطلاعات موجود در فايل XML حاوی اطلاعات دانشجويان با يک فرمت خاص ( جدول ) .
    توضيحات : در مثال فوق ، از فايل XML نمونه ( موجود در بخش اول (استفاده از XSLT به منظورفرمت دهی خروجی برنامه های وب دات نت) مقاله ) بهمراه فايل 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 ، خروجی زير نمايش داده می شود .
    http://www.srco.ir/Articles/images/WebXSLT5.jpg

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

    يک فايل XSL ، می تواند شامل چندين تمپليت باشد يک تمپليت XSL برای هر يک از گره های XML که قصد ارائه فرمت مشابه و يکسانی را برای آنان داريم ، بکار گرفته می شود . .در فايل XML مربوط به دانشجويان می توان (بعنوان نمونه ) ، دو تمپليت را ايجاد که هر يک مسئوليت تعريف فرمت نحوه نمايش بخش خاصی از فايل XML را بر عهده خواهند گرفت .
    <LI dir=rtl>تمپليت اصلی ، مسئوليت تعريف فرمت مناسب به منظور نمايش 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 ، خروجی زير نمايش داده می شود .
    http://www.srco.ir/Articles/images/webXSLT6.jpg
    تمپليـت استفاده شده در فايل 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://www.srco.ir/Articles/images/webXSLT7.jpg
     
  3. کاربر ویژه

    تاریخ عضویت:
    ‏25/11/10
    ارسال ها:
    8,717
    تشکر شده:
    4,395
    امتیاز دستاورد:
    123
    حرفه:
    Telegram: vahid_yakamoz instagram: vahid_yakamoz
    پاسخ : استفاده از xslt در برنامه های وب (بخش اول) - جايگاه xslt به منظور فرمت دهی خروجی برنامه های و

    • استفاده از xslt در برنامه های وب (بخش سوم) - نحوه انجام عمليات مرتب سازی و ساختارهای تصميم گيری در xslt




    مرتب سازی ( Sorting )

    مرتب سازی در XSLT با افزودن يک و يا چندين عنصر فرزند <xsl:Sort> به عنصر <xsl:apply-templates> و يا <xsl:for each> محقق می گردد . گرامر استفاده از عنصر فوق ، بصورت زير است :

    xsl:sort element syntax
    <xsl:sort select="Xpath expression"
    lang ="lang"
    data-type="text or number"
    order = "ascending or descending "
    case-order = "upper-first or lower-first" />

    خصلت Select ، باعث انتخاب يک عنصر و يا خصلت می گردد . در صورتيکه بيش از يک عنصر <xsl:sort> استفاده گردد ، خروجی در ابتدا بر اساس عنصر و يا خصلت مشخص شده در اولين <xsl:sort> مرتب شده و در صورتيکه پس از مرتب سازی ، موارد تکراری وجود داشته باشد ، موارد موجود توسط عنصر و يا خصلت مشخص شده در دومين <xsl:sort> ، مرتب می گردند . خصلت data-type ، مشخص کننده نوع داده ئی است که قصد مرتب سازی آن وجود دارد( عددی و يا حرفی ) . مثلا" در صورتيکه قصد مرتب سازی اعداد 1 ، 10 ، 11، 5 را داشته باشيم ، نوع data-type می بايست text در نظر گرفته شود . در چنين حالتی خروجی بصورت : 5 ، 11، 10 ، 1 خواهد بود . در صورتيکه مرتب سازی بصورت عددی انجام شود ، مقدار خصلت data-type می بايست number در نظر گرفته شود . در چنين حالتی نتيجه عمليات مرتب سازی بصورت 11 ، 10 ، 5 ، 1 می باشد . خصلت data-type دارای مقدار پيش فرض ، text می باشد. خصلت order ، پارامتر صعودی و يا نزولی فرآيند مرتب سازی را مشخص می نمايد. مقدار پيش فرض اين خصلت ascending می باشد . خصلت case-order ، اولويت حروف را مشخص می نمايد (حروف بزرگ و يا کوچک ). مثلا"، در صورتيکه برای خصلت case-order مقدار upper-first در نظر گرفته شده باشد و قصد مرتب سازی داده هائی نظير : A B a b را داشته باشيم ، نتايج بصورت : A a B b خواهد بود . در صورتيکه مقدار خصلت فوق ، lower-first در نظر گرفته شود ، نتيجه عمليات مرتب سازی بصورت : a A b B خواهد بود. مقدار پيش فرض خصلت فوق بستگی به خصلت lang داشته که زبان سند مورد نظر را مشخص می نمايد. زمانيکه ، برای خصلت lang ، مقدار en در نظر گرفته شود ، خصلت case-order دارای مقدار پيش فرض، upper-first است .
    مثال يک :

    هدف : استفاده از عنصر xsl:sort به منظور مرتب سازی مشخصات دانشجويان بر اساس نام خانوادگی
    توضيحات : درمثال فوق ، از فايل XML زير استفاده شده است ( فايل XML حاوی نام و نام خانوادگی پنج دانشجو می باشد ) .

    Student XML file
    <?xml version="1.0" encoding="utf-8" ?>
    <?xml version="1.0" encoding="utf-8" ?>
    <Students>
    <name>
    <first> علی</first>
    <last> رضائی</last>
    </name>
    <name>
    <first> خسرو </first>
    <last> ايرانی</last>
    </name>
    <name>
    <first>حسين </first>
    <last> ياوری</last>
    </name>
    <name>
    <first>محمد رضا </first>
    <last> خسروی </last>
    </name>
    <name>
    <first> پيمان </first>
    <last>دوستی </last>
    </name>
    </Students>

    فايل XSL استفاده شده برای مثال يک :
    Student XSL file for sortting
    <?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>
    </tr>
    <xsl:for-each select="Students/name">
    <xsl:sort select="last"/>
    <tr>
    <td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="first"/></font></td>
    <td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="last"/></font></td>
    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    خروجی : پس از مقداردهی خصلت های DocumentSource و TransformSource کنترل سرويس دهنده XML ، به ترتيب به فايل های XML و XSL ، خروجی زير نمايش داده می شود .
    http://www.srco.ir/Articles/images/webXSLT8.jpg
    ساختار تصميم گيری

    در زمان ايجاد يک StyleSheet ،در برخی حالات نيازمند اتخاذ تصميم در رابطه با نحوه نمايش نتايج می باشيم . XSLT دارای عناصری است که با استفاده از آنان می توان کنترل روند پردازش را در Stylesheet انجام داد. هر زبان برنامه نويسی امکان اتخاذ تصميم را از طريق کد نوشته شده در اختيار برنامه نويسان قرار می دهد . XSLT از اين قاعده مستثنی نبوده و امکان تصميم گيری بر اساس شرايط موجود را با استفاده از دو عنصر <xsl:if> و <xsl:choose> فراهم می نمايد . گرامر عمومی دو عنصر فوق، بصورت زير می باشد :

    xsl:if element syntax
    <xsl:if test="Boolean expression"

    xsl:choose element syntax
    <xsl:choose>
    <xsl:when test="Boolean expression" >
    <xsl:when test="Boolean expression" >
    <xsl:otherwise>
    </xsl:choose>

    برای هر دو عنصر <xsl:if> و <xsl:choose> ، عبارت منطقی ( Boolean expression > يک عبارت XPath بوده که به يک مقدار منطقی تبديل خواهد شد.عبارت XPath بر اساس قوانين زير به يک عبارت منطقی تبديل می گردد :
    <LI dir=rtl>در صورتيکه مقدار عددی بوده و ارزش آن صفر باشد ، مقدار False در نظرگرفته خواهدشد.برای هر مقدار غيرصفر( مثبت و يا منفی ) ، مقدار True در نظر گرفته می شود . <LI dir=rtl>در صورتيکه مقدار يک رشته باشد و طول آن بيش از صفر باشد ، مقدار True در نظر گرفته خواهد شد . <LI dir=rtl>در صورتيکه مقدار يک مجموعه گره باشد و مقدار آن غيرتهی باشد ، مقدار True در نظر گرفته خواهد شد .
    هر نوع ديگر اشياء بر اساس نوع شی به يک مقدار منطقی تبديل خواهند شد .
    مثلا" عبارت : < "xsl:if test = "name > ، در صورتيکه يک عنصر با نام <name> غيرتهی وجود داشته (عضوء context node ) ، مقدار True و در غير اينصورت مقدار False در نظر گرفته خواهد شد.
    عنصر <xsl:if> ، ساده ترين ساختار تصميم گيری ارائه شده در XSLT می باشد. عنصر فوق ، مقدار عبارت را بررسی ( ارائه شده توسط خصلت test ) و در صورتيکه مقدار آن True باشد ، محتويات عنصر <xsl:if> ، بررسی و اجراء خواهند شد .
    xsl:if element Example
    <xsl:if test="name" > نام مورد نظر پيدا گرديد</xsl:if>

    در مثال فوق ، در صورتيکه عنصر <name> بعنوان فرزندی از context node وجود داشته باشد ، عبارت " نام مورد نظر پيدا گرديد " ، نمايش داده می شود.
    عنصر <xsl:choose> ، نسبت به <xsl:if> امکانات بيشتری را بمنظور اتخاذ تصميم ارائه می نمايد . ساختار فوق، امکان تصميم گيری پيجيده تری را فراهم می نمايد.در عنصر فوق ، می توان از يک گزينه "پيش فرض " ، نيز استفاده نمود .
    xsl:choose Example :
    <xsl:choose>
    <xsl:when test="salary[number(.) &gt; 2000]" > يک عدد بزرگ </xsl:when>
    <xsl:when test="salary[number(.) &gt; 1000]" > يک عدد متوسط </xsl:when>
    <xsl:otherwise> يک عدد کوچک </xsl:otherwise>
    </xsl:choose>

    در صورتيکه عنصر <number> ، شامل يک مقدار عددی بيش از 2000 باشد ، عبارت : "يک عدد بزرگ " در خروجی نمايش داده خواهد شد . در صورتيکه مقدار عنصر فوق بيش از 1000 باشد .، عبارت : "يک عدد متوسط " در خروجی نمايش داده می شود. در ساير حالات ، عبارت : " يک عدد کوچک" در خروجی نمايش داده خواهد شد .در مثال فوق از يک تابع XPath استفاده شده است ( تابع ( ) number ) .تابع فوق،مسئوليت تبديل مقدار عنصر <number> به يک مقدار عددی را برعهده دارد . فراموش نکنيم که تمامی اطلاعات موجود در يک فايل XML ، صرفا" بصورت متن بوده و XSLT همواره با داده موجود در يک فايل XML بصورت text برخورد خواهد کرد( مگراينکه ، با صراحت به XSLT اعلام گردد که می بايست در اين رابطه تبديلی صورت پذيرد) . در صورتيکه از تابع number استفاده نشود ، XSLT داده موردنظر را بصورت Text بررسی می نمايد. ( در مثال فوق در مقابل علامت "<" از "gt " استفاده شده است ).
    مثال دو :

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

    Student XSL file : If Example
    <?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>
    </tr>
    <xsl:for-each select="Students/name">
    <xsl:if test="first="خسرو"" >
    <tr>
    <td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="first"/></font></td>
    <td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="last"/></font></td>
    </tr>
    </xsl:if>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    خروجی : پس از مقداردهی خصلت های DocumentSource و TransformSource کنترل سرويس دهنده XML ، به ترتيب به فايل های XML و XSL ، خروجی زير نمايش داده می شود .
    http://www.srco.ir/Articles/images/webXSLT9.jpg
    مثال سه :

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

    Student XSL file for sortting
    <?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>
    </tr>
    <xsl:for-each select="Students/name">
    <xsl:choose>
    <xsl:when test="first="خسرو"">
    <tr>
    <td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="first"/></font></td>
    <td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="last"/></font></td>
    </tr>
    </xsl:when>
    <xsl:when test="first="پيمان"">
    <tr>
    <td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="first"/></font></td>
    <td Align="Center" bgcolor="#F4F4FF"><font size="2"><xsl:value-of select="last"/></font></td>
    </tr>
    </xsl:when>
    </xsl:choose>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    خروجی : پس از مقداردهی خصلت های DocumentSource و TransformSource کنترل سرويس دهنده XML ، به ترتيب به فايل های XML و XSL ، خروجی زير نمايش داده می شود .
    http://www.srco.ir/Articles/images/webXSLT10.jpg