Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : XSLT Functions : xslt_set_scheme_handlers

xslt_set_scheme_handlers

Set the scheme handlers for the XSLT processor (PHP 4 >= 4.0.6)
void xslt_set_scheme_handlers ( resource processor, array handlers )


Code Examples / Notes » xslt_set_scheme_handlers

ohlesbeauxjours

xslt_set_scheme_handlers is a powerful feature, derived from the Sablotron engine, which can help in various situations.
Briefly, it allows you to call any kind of PHP instruction, during the treatment of a stylesheet, through the XSLT document() function.
For example, here is an implementation of the "file_exists()" PHP function :
// Definition of the handler :
function mySchemeHandler($processor, $scheme, $rest) {
 $rest=substr($rest,1); // to remove the first / automatically added by the engine
 if($scheme == 'file_exists')
   return '<?xml version="1.0" encoding="UTF-8"?><root>'.(file_exists($rest) ? "true" : "false")."</root>";
   // result is embedded in a small xml string
}
// Initialisation of the handler (the "get_all"  should be work in most cases) :
$SchemeHandlerArray = array();
$SchemeHandlerArray["get_all"] = "mySchemeHandler";
// Start the engine :
$params = array();
$xh = xslt_create();
xslt_set_scheme_handlers($xh,$SchemeHandlerArray);
$result = xslt_process($xh,"myFile.xml","myFile.xsl",NULL,array(),$params);
xslt_free($xh);
echo $result;
Then, inside the stylesheet, you can test whether a certain file exists with :
<xsl:if test="document('file_exists:anotherXMLfile.xml’)/root='true'">
< !-- bla bla bla -->
</xsl:if>
So finally, the principle is simple :
- you define a scheme (here, I called it "file_exists")
- you write the action associated to that scheme (in the mySchemeHandler function)
- you embed the (probable) results in an XML string, that you return.
- and in the stylesheet, you check : document('myPersonalURIscheme:myXPath')
You can imagine many other uses for the mySchemeHandler() function.
My framework is : PHP 4.2.3, Sablotron version 0.96, and Expat 1.95.5
Please note that some older version of PHP might require an additionnal parameter :
mySchemeHandler($processor,$scheme,$rest,&$buffer)
and you place your XML in $buffer, instead of returning it with return().
Baptiste


cchittleborough

Here's some useful information I found in the PHP 4.3.4 source (in the file ext/xslt/README.XSLT-BACKENDS):
void xslt_set_scheme_handlers(resource processor, array handlers)
Registers the scheme handlers for the document (aka XPath handlers), given a XSLT processor resource (allocated by xslt_create()) and an array in the following format:

   array(
  "get_all" => function,
  "open"    => function,
  "get"      => function,
  "put"      => function,
  "close"    => function
)

Where function is either a function name or an array in the following format:

   array(&$obj, "method")
Note:  You do not need to handle the array(&$obj, method") syntax by yourself as this is handled in the C call_xslt_function() library function (and more specifically, Zend's call_user_function_ex() function.
Note:  The given array does not need to contain all of the different scheme handler elements (although it can), but it only needs to conform to the "handler" => "function" format described above.
Each of the individual scheme handler functions called are in the formats below:

   string    get_all(resource processor, string scheme, string rest)
   resource open(resource processor, string scheme, string rest)
   int       get(resource processor, resource fp, string &data)
   int       put(resource processor, resource fp, string data)
   void      close(resource processor, resource fp)


Change Language


Follow Navioo On Twitter
xslt_backend_info
xslt_backend_name
xslt_backend_version
xslt_create
xslt_errno
xslt_error
xslt_free
xslt_getopt
xslt_process
xslt_set_base
xslt_set_encoding
xslt_set_error_handler
xslt_set_log
xslt_set_object
xslt_set_sax_handler
xslt_set_sax_handlers
xslt_set_scheme_handler
xslt_set_scheme_handlers
xslt_setopt
eXTReMe Tracker