140 likes | 248 Vues
This guide explores XML transformation using XSLT (Extensible Stylesheet Language Transformations), which is a W3C-recommended method for applying styles to XML documents. XSLT enables developers to sort, filter, and format XML data for various output types, such as HTML for web browsers. The guide includes practical XSLT examples, highlighting how to create templates that separate content from presentation while utilizing parameters for dynamic data handling. Learn how to effectively transform XML data into user-friendly formats.
E N D
CG0119 Web Database SystemsParsing XML: using SimpleXML & XSLT
XSLT • EXtensible Stylesheet Language Transformations • What is it? • w3c recommendation that applies style sheets to XML • Allows styles to be applied for outputting XML, to a web browser for instance. • Can also sort and filter data for output • Like CSS, separates formatting from content
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="heading" select="'XML Grade Listing (using XSLT)'"/> <xsl:output method="html" encoding="iso-8859-1" indent="no"/> <xsl:template match="/"> <h1><xsl:value-of select="$heading"/></h1> <table border="1"> ... <xsl:for-each select="grades/grade"> <tr> <td><xsl:value-of select="gradeID"/></td> <td><xsl:value-of select="result"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> Style sheet declaration (must be at the beginning of the file) Creating the XSLT (1/6)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="heading" select="'XML Grade Listing (using XSLT)'"/> <xsl:output method="html" encoding="iso-8859-1" indent="no"/> <xsl:template match="/"> <h1><xsl:value-of select="$heading"/></h1> <table border="1"> ... <xsl:for-each select="grades/grade"> <tr> <td><xsl:value-of select="gradeID"/></td> <td><xsl:value-of select="result"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> This is optional – purely demonstrates that parameters can be used in a similar way to variables. Creating the XSLT (2/6)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="heading" select="'XML Grade Listing (using XSLT)'"/> <xsl:output method="html" encoding="iso-8859-1" indent="no"/> <xsl:template match="/"> <h1><xsl:value-of select="$heading"/></h1> <table border="1"> ... <xsl:for-each select="grades/grade"> <tr> <td><xsl:value-of select="gradeID"/></td> <td><xsl:value-of select="result"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> Declares the output method. Can also output as “xml” and “text”. Creating the XSLT (3/6)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="heading" select="'XML Grade Listing (using XSLT)'"/> <xsl:output method="html" encoding="iso-8859-1" indent="no"/> <xsl:template match="/"> <h1><xsl:value-of select="$heading"/></h1> <table border="1"> ... <xsl:for-each select="grades/grade"> <tr> <td><xsl:value-of select="gradeID"/></td> <td><xsl:value-of select="result"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> Create a template that will be applied to any part of the XML that matches the expression. “/” is the expression for the root element. Creating the XSLT (4/6)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="heading" select="'XML Grade Listing (using XSLT)'"/> <xsl:output method="html" encoding="iso-8859-1" indent="no"/> <xsl:template match="/"> <h1><xsl:value-of select="$heading"/></h1> <table border="1"> ... <xsl:for-each select="grades/grade"> <tr> <td><xsl:value-of select="gradeID"/></td> <td><xsl:value-of select="result"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> value-of is used to extract the data from a XML element or a param. XHTML can be inserted where ever required… Creating the XSLT (5/6)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="heading" select="'XML Grade Listing (using XSLT)'"/> <xsl:output method="html" encoding="iso-8859-1" indent="no"/> <xsl:template match="/"> <h1><xsl:value-of select="$heading"/></h1> <table border="1"> ... <xsl:for-each select="grades/grade"> <tr> <td><xsl:value-of select="gradeID"/></td> <td><xsl:value-of select="result"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> Selects & applies a style for every element of a node-set as defined by the expression in the ‘select’ attribute. Creating the XSLT (6/6)
Displaying XML using XSLT in PHP // Load the XML data source $xml= simplexml_load_file('grade.xml'); // one of these will work $xml= DOMDocument::loadXML(file_get_contents('grade.xml'); // Load the XML stylesheet $xsl = simplexml_load_file('grade.xsl'); // one of these will work $xsl = DOMDocument::loadXML(file_get_contents('grade.xsl'); // create an xslt processor instance $proc = new XSLTProcessor; // import the xsl stylesheet into the xslt processor $proc->importStyleSheet($xsl); // Transform and output the xml data source echo $proc->transformToXML($xml);
Sorting Data using the XSLT <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ... <xsl:template match="/"> <h1><xsl:value-of select="$heading"/></h1> <table border="1"> ... <xsl:for-each select="grades/grade"> <xsl:sort select="result"/> <tr> <td><xsl:value-of select="gradeID"/></td> <td><xsl:value-of select="result"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>
Summary • XSLT allows style sheets to be applied to XML documents • Separates style from content • Can output as xml, html and text Use the reference on the next page. It is a good resource
Recommended Reading http://www.w3schools.com/xsl/default.asp - w3schools XSLT tutorial & reference