2012-08-22 36 views
1

最近,我一直在幫助某人將網站從一個遠程網絡服務器遷移到本地網絡服務器。不過,我繼承了代碼包含這樣的代碼:如何在PHP5中使用XSLT函數?

$xsltproc = xslt_create(); 
$html = xslt_process($xsltproc, $path, 'xsl/Stylesheet2.xsl'); 

然而,PHP5不喜歡這樣的代碼,並從我讀過,使用像上面XSLT的功能PHP5中不允許。顯然,這段代碼一定是用PHP4編寫的,用在運行PHP4的服務器上。我的問題是,我怎麼能得到這個代碼在我的PHP5服務器上工作(有更多的代碼使用「XSLT」,上面只是一個片段)?重寫所有的代碼是使其工作的唯一方法嗎?如果可能,我寧願避免。

+1

_「注意:如果您需要PHP 5的xslt支持,您可以使用[XSL擴展名](http ://us.php.net/manual/en/book.xsl.php)。「_ - [XSLT文檔](http://us.php.net/manual/en/intro.xslt.php) – Wiseguy

+1

可能[如何在PHP 5中啓用XSLT函數?](http://stackoverflow.com/questions/4451042/how-do-i-enable-xslt-functions-in-php-5) – Wiseguy

+0

檢查此http: //stackoverflow.com/questions/4451042/how-do-i-enable-xslt-functions-in-php-5 – PoX

回答

0

我希望這是解決問題

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)); 
    } 
}