140 likes | 241 Views
CG0119 Web Database Systems Parsing XML: using SimpleXML & XSLT. XSLT. E X tensible S tylesheet L anguage T ransformations 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.
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