在xslt中调用php函数

Filed under: 开发编程 |
Posted on

最近一直在研究php下的xml+xslt,我固执的认为这种结合生成的xhtml页面是能最符合w3c标准的。
数据层采用xml,界面层采用xslt,界面外观样式则采用css。按照这个模式,可以很轻松的进行工作分配,而且还能同时开展,省时省力。
本文简单的记录下我近期的一段研究成果——在xslt中调用php函数。
test.xsl

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <xsl:stylesheet version="1.0" 
  3.     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  4.     xmlns="http://www.w3.org/1999/xhtml" 
  5.     xmlns:php="http://php.net/xsl" 
  6.     xsl:extension-element-prefixes="php"><!-- 注意这里 --> 
  7. <xsl:output 
  8.     method="xml" 
  9.     indent="yes" 
  10.     encoding="utf-8" 
  11.     omit-xml-declaration="yes" 
  12.     media-type="application/xhtml+xml" 
  13.     doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
  14.     doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" /> 
  15. <xsl:template match="/"> 
  16.      <xsl:value-of select="php:function('getadd','1','2')" /><!-- 1,2可以改变为任意数字 --> 
  17. </xsl:template> 
  18. </xsl:stylesheet>

test.

  1. <?php 
  2. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  3. header("Cache-Control: no-cache, must-revalidate");
  4. header("Pragma: no-cache");
  5. header('Content-Type: text/xml; charset=UTF-8');
  6. $xmlfile="<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
  7. $xmlfile.="<root></root>";
  8.  
  9. echo parseTemplate("test",$xmlfile);
  10.  
  11. //xml+xsl转换函数
  12. function parseTemplate($xslfile,$xmlfile,$xmlloadtype=1){ 
  13.     $xsl = new DOMDocument;
  14.     $xsl->load($xslfile.".xsl");
  15.     $xml = new DOMDocument;
  16.     switch ($xmlloadtype){ 
  17.         case 0:$xml->load($xmlfile);break;
  18.         case 1:$xml->loadxml($xmlfile);break;
  19.     } 
  20.     $processor = new xsltprocessor;
  21.     $processor->registerPHPFunctions();//这句很重要
  22.     $processor->importStyleSheet($xsl);
  23.     return $processor->transformToXML($xml);
  24. } 
  25.  
  26. //在test.xsl中调用到的php函数
  27. function getadd($i=0,$j=0){ 
  28.     return $i+$j;
  29. } 
  30. ?>

运行显示为3

如果想再深入的加以运用,只要沿着这个思路就可以了。:)

相关文章

Tags : ,
Trackback url : u can trackback from your own site
分享到新浪微博

2 Responses to “在xslt中调用php函数”

  1. ...... winson Says:

    你好,我觉得你用xsl跟js挺熟的,有个问题想请教
    在一个xsl文件里,我取得某个节点的文本值后把它赋值给某个js函数,例如showmeg(”)
    解释这个页面时 就出现这种情况
    show(‘
    节点文本值
    ‘)
    节点文本值前后总有个换行符,就造成了js的语法错误,报语句没结束的错误信息,有什么办法可以解决这个问题呢
    如果我用赋节点的属性值就没有这样的情况发生

  2. ...... 李方进 Says:

    用xslt的string()函数把取得该节点的文本值处理一下

Leave a Reply