Tuesday, November 3, 2009

Passing Parameters to an XSLT Stylesheet




I l@ve RuBoard










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>






    I l@ve RuBoard



    No comments:

    Post a Comment