200 likes | 351 Views
XSLT. مرتضى منتظرى دانشگاه تهران. XSLT. Extensible Stylesheet Language Transformations تبديل مستندات XML به انواع ديگر مستندات مانند HTML ,Text,XML XSLT از دو فايل استفاده مي كند: فايل XML كه شامل داده هاي XML است
E N D
XSLT مرتضى منتظرى دانشگاه تهران
XSLT • Extensible Stylesheet Language Transformations • تبديل مستندات XML به انواع ديگر مستندات مانندHTML ,Text,XML • XSLT از دو فايل استفاده مي كند: • فايل XML كه شامل داده هاي XML است • فايل XSL كه در آن دستورات XSLT براي تبديل فايل XML قرار گرفته است
مثال ساده • فايل data.xml: • <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="render.xsl"?><message>Howdy!</message> • فايل render.xsl: • <?xml version="1.0"?><xsl:stylesheet version="1.0”xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><html><body><h1><xsl:value-of select="message"/></h1></body></html> </xsl:template></xsl:stylesheet
فايل .XSL • هر فايل XSLT داراي پسوند XSL است • يك سند XSLT • شروع ميشود با: • <?xml version="1.0"?> • <xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/ XSL/Transform"> • شامل يك يا بيشتر template است: <xsl:template match="/"> ... </xsl:template> • در پايان: </xsl:stylesheet>
بررسي مثال • قالب <xsl:template match="/">مي گويد: • كل فايل XML را انتخاب كن • دستور <xsl:value-of select="message"/> مي گويد: • از فايل انتخاب شده مقدار نود message را برگردان • در اينجا ميتوان به جاي message از هر يك از دستورات xpath زير استفاده كرد: • ./message • /message/text() • ./message/text()
مراحل تبديل در مثال قبل • <xsl:template match="/"><html><body> <h1><xsl:value-of select="message"/></h1> </body></html> • </xsl:template> فايلXSL <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="render.xsl"?><message>Howdy!</message> فايل XML
مراحل تبديل در مثال قبل • <xsl:template match="/"><html><body> <h1><xsl:value-of select="message"/></h1> </body></html> • </xsl:template> فايلXSL <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="render.xsl"?><message>Howdy!</message> فايل XML خروجي <html><body>
مراحل تبديل در مثال قبل • <xsl:template match="/"><html><body><h1><xsl:value-of select="message"/></h1> </body></html> • </xsl:template> فايلXSL <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="render.xsl"?><message>Howdy!</message> فايل XML خروجي <html><body> <h1>Howdy!</h1>
مراحل تبديل در مثال قبل • <xsl:template match="/"><html><body><h1><xsl:value-of select="message"/></h1></body></html> • </xsl:template> فايلXSL <?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="render.xsl"?><message>Howdy!</message> فايل XML خروجي <html><body> <h1>Howdy!</h1> </body></html>
عملگرهاي XSLT • Xsl:value-of • Xsl:for-each • Xsl:if • Xsl:choose • Xsl:sort
Xsl:value-of <xsl:value-of select="XPath expression"/> • خصيصه select براي اين عملگر لازم است • اين عملگر محتويات المنت مشخص شده با عبارت Xpath را در خروجي قرار ميدهد
xsl:for-each • اين عملگر همان حلقه زبانهاي برنامه نويسي است • نحو اين عملگر به اين صورت است: <xsl:for-each select="XPath expression">Text to insert and rules to apply </xsl:for-each> • مثلا براي نمايش عنوان تمام كتابهاي موجود در فايل XML ميتوان نوشت: <xsl:for-each select=“//book"> <xsl:value-of select="title"/> </xsl:for-each>
xsl:if • همان عملگر شرطي زبانهاي برنامه نويسي است • نحو اين عملگر به صورت زير است: <xsl:if test=“عبارت شرطي مورد نظر"> Text to insert and rules to apply </xsl:if> • مثال:عنوان كتابهايي كه نويسنده آنها Terry است نمايش دهيد: <xsl:for-each select="//book"> <xsl:if test="author='Terry'"> <xsl:value-of select="title"/> </xsl:if> </xsl:for-each>
xsl:choose • معادل دستور switch در زبان C ميباشد • نحو اين عملگر به اين صورت است: <xsl:choose> <xsl:when test="some condition">... some code ... </xsl:when> <xsl:otherwise>... some code ... </xsl:otherwise></xsl:choose>
xsl:sort • اين عملگر به همراه xsl:for-each به كار ميرود • خصيصه select اين عملگرمشخص ميكند بر اساس چه فيلدي عمل sort انجام شود • مثال:عنوان همه كتابها به ترتيب نويسندگان <xsl:for-each select="//book"> <xsl:sort select="author"/> <xsl:value-of select="title"/></xsl:for-each>
افزودن tag • فرض كنيد سند xml شامل عبارات زير باشد: <name>Dr. Dave's Home Page</name><url>http://www.cis.upenn.edu/~matuszek</url> • و ما بخواهيم آنرا به tag زير تبديل كنيم: <a href=http://www.cis.upenn.edu/~matuszek>Dr. Dave's Home Page</a> • براي اين كار دو راه وجود دارد: • استفاده از دستور <xsl:attribute name="..."> • استفاده از براكت
افزودن tag • استفاده از دستور <xsl:attribute name="..."> <a> <xsl:attribute name="href"><xsl:value-of select="url"/> </xsl:attribute><xsl:value-of select="name"/> </a> • استفاده از براكت <a href="{url}"> <xsl:value-of select="name"/> </a>
template هاي نامدار • ميتوان براي template ها نام در نظر گرفت و به صورت تابع فراخواني كرد • Template نامدار: <xsl:template name="myTemplateName">...body of template… </xsl:template> • فراخواني template: <xsl:call-template name="myTemplateName"/> • يا <xsl:call-template name="myTemplateName">...parameters... </xsl:call-template>
مثال Template: <xsl:template name=“BookInfo"> <xsl:param name=“title"/> <xsl:param name=“author"/> <xsl:value-of select=$title /> By <xsl:value-of select=$author /> </xsl:template> Call: <xsl:for-each select=“//book”> <xsl:call-template name=“BookInfo”> <xsl:with-param name=“title” select=“//title” /> <xsl:with-param name=“author” select=“//author” /> </xsl:call-template> </xsl:for-each>