XSLT (PHP 4) 函数
在线手册:中文 英文
PHP手册

xslt_create

(PHP 4 >= 4.0.3)

xslt_createCreate a new XSLT processor

说明

resource xslt_create ( void )

Create and return a new XSLT processor resource for manipulation by the other XSLT functions.

返回值

Returns an XSLT processor link identifier on success, or FALSE on error.

范例

Example #1 xslt_create() example

<?php
function xml2html($xmldata$xsl)
{
    
/* $xmldata -> your XML */
    /* $xsl -> XSLT file */

    
$path 'include';
    
$arguments = array('/_xml' => $xmldata);
    
$xsltproc xslt_create();
    
xslt_set_encoding($xsltproc'ISO-8859-1');
    
$html =
        
xslt_process($xsltproc'arg:/_xml'"$path/$xsl"NULL$arguments);

    if (empty(
$html)) {
       die(
'XSLT processing error: 'xslt_error($xsltproc));
    }
    
xslt_free($xsltproc);
    return 
$html;
}
?>

参见


XSLT (PHP 4) 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: Create a new XSLT processor

用户评论:

LW (28-Aug-2008 09:41)

Hello,

I changed the function from myadzel (?) a little bit, so that it now correctly uses either a file OR a string as parameter - WITHOUT producing PHP warnings. See here:

<?php
function xslt ($xml, $xsl) {

   
$xh = @xslt_create();

   
$args['xml'] = ( file_exists( $xml ) )?join ('', file ($xml)):$xml;
   
$args['xsl'] = ( file_exists( $xsl ) )?join ('', file ($xsl)):$xsl;

   
// try with a string
   
$result = @xslt_process ($xh, 'arg:/xml', 'arg:/xsl', NULL, $args);

   
// try with resource
   
if (!$result) { $result = @xslt_process ($xh, $xml, $xsl); }

    @
xslt_free ($xh);
    return
$result;

}
?>

Examples:
echo xslt ('./index.xml', './index.xsl');
echo xslt ('<test><example>An example!</example></test>', './index.xsl');

sxguard-1trail(At)yahoo dot com (06-Jun-2008 04:12)

Hardly can I find this. But, those required dll is not included in the package and no link for download.

It's a pitty that no discussion about this within php.net

  Note   to   Win32   Users:     In   order   to   enable   this   module   on   a   Windows   environment,   you   must   copy   several   files   from   the   DLL   folder   of   the   PHP/Win32   binary   package   to   the   SYSTEM32   folder   of   your   windows   machine.   (Ex:   C:\WINNT\SYSTEM32   or   C:\WINDOWS\SYSTEM32).   For   PHP   <=   4.2.0   copy   sablot.dll     and   expat.dll   to   your   SYSTEM32   folder.   For   PHP   >=   4.2.1   copy   sablot.dll,   expat.dll   and   iconv.dll   to   your   SYSTEM32   folder.

myadzel at gmail dot com (20-Mar-2007 04:26)

All for a long time know about a problem xslt-transformation in php.
We shall try a trivial way, knowing, that xslt_process () accepts string or resources in it's parameters.

function xslt ($xml, $xsl) {

    $xh = @xslt_create();

    $args['xml'] = join ('', file ($xml));
    $args['xsl'] = join ('', file ($xsl));

    // try with a string
    $result = @xslt_process ($xh, 'arg:/xml', 'arg:/xsl', NULL, $args);

    // try with resource
    if (!$result) { $result = @xslt_process ($xh, $xml, $xsl); }

    @xslt_free ($xh);
    return $result;

}

For example: echo xslt ('./index.xml', './index.xsl');

Kerry Kobashi (29-Mar-2005 03:29)

It should be noted that xslt_create() will return FALSE in the case of failure (Sablotron processor could not be created).

This, obtained from looking at the source code extension.

garth at webconexion dot net (18-Sep-2003 01:23)

In order to pass PHP variables into an XSL document you need to do the following:

Firstly I created the following function to use:

function GetXHTML($sXML, $sXSL, $aParameters)
{
    $hXML = xslt_create();
    $aArguments = array('/_xml' => $sXML, '/_xsl' => $sXSL);
    $sXHTML = xslt_process($hXML, 'arg:/_xml', 'arg:/_xsl', NULL, $aArguments, $aParameters);
    xslt_free($hXML);
    return $sXHTML;
}

Then call it like thus, passing the XML and XSL as a string with the final parameter being an array which can contain as many values as you wish to pass in:

$sXHTML = GetXHTML($sXML, $sXSL, array("age"=>"26"));

Then in the XSL document you need the following:

<xsl:param name="age" />

Then where you want to display the value of age you do this:

<xsl:value-of select="$age" />

Thanks now.