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');
xslt_create
(PHP 4 >= 4.0.3)
xslt_create — Crée un nouvel analyseur XSLT
Description
resource xslt_create
( void
)
Crée et retourne une nouvelle ressource XSLT nécessaire pour les appels ultérieurs aux fonctions XSLT.
Valeurs de retour
Retourne un identifiant de processus XSLT en cas de succès, ou FALSE si une erreur survient.
Exemples
Exemple #1 Exemple avec xslt_create()
<?php
function xml2html($xmldata, $xsl)
{
/* $xmldata -> votre XML */
/* $xsl -> fichier XSLT */
$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('Erreur d\'analyse XSLT : '. xslt_error($xsltproc));
}
xslt_free($xsltproc);
return $html;
}
?>
xslt_create
LW
28-Aug-2008 10:41
28-Aug-2008 10:41
sxguard-1trail(At)yahoo dot com
06-Jun-2008 05:12
06-Jun-2008 05: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 05:26
20-Mar-2007 05: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 05:29
29-Mar-2005 05: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 02:23
18-Sep-2003 02: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.
