Passing Parameters to an XSLT Stylesheet
If you need to pass data from the PHP script to the XSLT stylesheet, PHP's xslt_process() function can be used to pass an associative arrays of parameters to the XSLT stylesheet.
You'll remember that the xslt_process() function can accept an array containing parameter-value pairs as an optional sixth argument. These parameters can be passed on to the stylesheet and used within template rules.
Consider Listing 4.8, which creates an associative array named $params, and stores two elements containing the page title and current date in it. This associative array is then passed on to the stylesheet via the xslt_process() function.
Listing 4.8 Passing Parameters to an XSLT Stylesheet
<?php
// set the filenames $xml_file = "aloha.xml"; $xslt_file = "aloha.xsl";
// set up the parameters $params = array("today" => date("d M Y", mktime()), "page_title" => "Aloha!"); // include an empty array for arguments (otherwise XSLT tends to break - hopefully corrected in next release) $arg_buffer = array();
// create the XSLT processor $xp = xslt_create() or die("Could not create XSLT processor");
// process the two files to get the desired output if($result = xslt_process($xp, $xml_file, $xslt_file, NULL, $arg_buffer, $params)) { echo $result; } else { echo "An error occurred: " . xslt_error($xp) . "(error code " . xslt_errno($xp) . ")"; }
// free the resources occupied by the handler xslt_free($xp); ?>
These parameters are now available to the stylesheet and can be used within a template rule via the <xsl:param /> element (see Listing 4.9).
Listing 4.9 Using Passed Parameters in an XSLT Stylesheet
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- define the parameter --> <xsl:param name="page_title"/> <xsl:param name="today"/>
<xsl:template match="/"> <html> <head> <!-- use the parameter --> <title><xsl:value-of select="$page_title" /> Today is <xsl:value-of select="$today" /> </title> </head> <body> <!-- other templates - snip! --> </body> </html> </xsl:template>
</xsl:stylesheet>
|
No comments:
Post a Comment