It may be that the data we want is stored in a database. What we could do is as follows:
For example, suppose we want to offer a WWW page where the visitor can look at a database containing some items displaying those items that have a cost less than some price. We will provide a WWW form for the visitor to type in the price.
Suppose we also want to offer the visitor a choice on how to display the data. We could provide radio buttons on the WWW form to get the visitor to choose between different styles of layout.
http://webster.dur.ac.uk/barry.cornelius/myphp/xslt/prices.htm.
Here is a WWW form that achieves this:
<HTML> <BODY> <FORM METHOD="POST" ACTION="prices.php"> What is your choice of price?<BR> <INPUT TYPE="text" NAME="somevalue"> <BR> <INPUT TYPE="radio" NAME="layout" VALUE="plain"> plain <BR> <INPUT TYPE="radio" NAME="layout" VALUE="table"> table <BR> <INPUT TYPE="submit" VALUE="Submit price"> <INPUT TYPE="reset"> </FORM> </BODY> </HTML>
When the visitor to this form clicks on the Submit price button, the prices.php script will be executed with two variables already set: the $somevalue variable will be initialised to the value that was typed in the form's textbox, and the $layout variable will be initialised to either plain or table.
We can use the value of the $somevalue variable in an SQL query (that produces a resultset):
mysql_connect("mysql.dur.ac.uk", "", ""); $SQLQuery = "SELECT * FROM consum WHERE price < $somevalue"; $result = mysql_db_query("Pdcl0bjc_prices", $SQLQuery); $numrows = mysql_numrows($result); for ($rownum = 0; $rownum<$numrows; $rownum++) { echo mysql_result($result,$rownum,"ID"); echo mysql_result($result,$rownum,"goods"); echo mysql_result($result,$rownum,"price"); echo "<BR>\n"; }
Each iteration of the above for loop outputs three values. Instead of using the for loop to output these values, we could get it to produce XML-decorated forms of these values, e.g. to generate something like:
<product> <ID>42</ID> <goods>3.5" floppy disc</goods> <price>0.35</price> </product>
And we can get it to append these characters to the end of a string (being stored in a variable called $xml). This is illustrated by the prices.php script:
<% mysql_connect("mysql.dur.ac.uk", "", ""); $SQLQuery = "SELECT * FROM consum WHERE price < $somevalue"; $result = mysql_db_query("Pdcl0bjc_prices", $SQLQuery); $numrows = mysql_numrows($result); if ( $numrows == 0) { die("<p>There are no consumables with a price < $somevalue</p>"); } $xml = "<?xml version=\"1.0\"?><consumables>"; for ($rownum = 0; $rownum<$numrows; $rownum++) { $xml .= "<product>"; $xml .= "<ID>".mysql_result($result,$rownum,"ID")."</ID>"; $xml .= "<goods>".mysql_result($result,$rownum,"goods")."</goods>"; $xml .= "<price>".mysql_result($result,$rownum,"price")."</price>"; $xml .= "</product>"; } $xml .= "</consumables>"; $arguments = array("/_xml" => $xml); $xsltproc = xslt_create(); $html = xslt_process($xsltproc, "arg:/_xml", $layout.".xsl", NULL, $arguments); if (!$html) { die("XSLT processing error:" . xslt_error($xsltproc)); } xslt_free($xsltproc); echo $html; %>The above script arranges for the value of $xml to be passed to a call of xslt_process. In this call, the third argument is either the value "plain.xsl" or the value "table.xsl".
The file plain.xsl could contain:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="consumables"> <html> <body> <pre> <xsl:apply-templates/> </pre> </body> </html> </xsl:template> <xsl:template match="product"> <xsl:value-of select="ID"/> <xsl:value-of select="goods"/> <xsl:value-of select="price"/> <br/> </xsl:template> </xsl:stylesheet>
and the file table.xsl could contain:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="consumables"> <html> <body> <table> <tr bgcolor="yellow"> <td>ID</td> <td>goods</td> <td>price</td> </tr> <xsl:apply-templates/> </table> </body> </html> </xsl:template> <xsl:template match="product"> <tr> <td><xsl:value-of select="ID"/></td> <td><xsl:value-of select="goods"/></td> <td><xsl:value-of select="price"/></td> </tr> </xsl:template> </xsl:stylesheet>