我希望這是解決問題
function transform($xmlvalue, $xsl,$paraArray=array(),$IsFileXML=FALSE)
{
$XML = new DOMDocument();
if ($IsFileXML)
$XML->load($xmlvalue);
else
$XML->loadXML($xmlvalue);
$xslt = new XSLTProcessor();
$XSL = new DOMDocument();
$XSL->load($xsl, LIBXML_NOCDATA);
$xslt->importStylesheet($XSL);
foreach ($paraArray as $key => $value) {
$xslt->setParameter('', $key,$value);
}
$xslt->registerPHPFunctions();
return $xslt->transformToXML($XML);
}
你必須調用PHP函數在XSLT這樣
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl" exclude-result-prefixes="php" version="1.0">
<xsl:output method="html" version="1.0" encoding="utf-8" indent="yes" omit-xml-declaration="no"/>
.....
.....
....
<tr>
<td valign="top" class="found_on">
Added : <strong>
<xsl:value-of select ="php:function('ClsXSLTFunction::getPublishDate',$publishdate)"/>
</strong> by <strong>
<xsl:value-of select="user"/>
</strong>
</td>
</tr>
....
....
</xsl:stylesheet>
你也可以調用自己的函數XSLT,但你必須創建一個類與這樣的靜態功能
class ClsXSLTFunction
{
public static function getPublishDuration($publishdate)
{
$epoch_1 = strtotime($publishdate);
$epoch_2 = strtotime(date('y-m-d H:m:s'));
$diff_seconds = $epoch_1 - $epoch_2;
$diff_weeks = floor($diff_seconds/604800);
$diff_seconds -= $diff_weeks * 604800;
$diff_days = floor($diff_seconds/86400);
$diff_seconds -= $diff_days * 86400;
$diff_hours = floor($diff_seconds/3600);
$diff_seconds -= $diff_hours * 3600;
$diff_minutes = floor($diff_seconds/60);
$diff_seconds -= $diff_minutes * 60;
return $diff_days."d".$diff_hours."h".$diff_minutes."m";
}
public static function getPublishDate($publishdate)
{
return date("m/d/Y",strtotime($publishdate));
}
}
_「注意:如果您需要PHP 5的xslt支持,您可以使用[XSL擴展名](http ://us.php.net/manual/en/book.xsl.php)。「_ - [XSLT文檔](http://us.php.net/manual/en/intro.xslt.php) – Wiseguy
可能[如何在PHP 5中啓用XSLT函數?](http://stackoverflow.com/questions/4451042/how-do-i-enable-xslt-functions-in-php-5) – Wiseguy
檢查此http: //stackoverflow.com/questions/4451042/how-do-i-enable-xslt-functions-in-php-5 – PoX