加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

XSLTProcessor中registerPHPFunctions后无法调用php函数

发布时间:2022-01-18 15:39:26 所属栏目:PHP教程 来源:互联网
导读:XSLT 是一个非常方便的转换 XML 的工具,PHP 里面是通过 XSLTProcessor 来实现;XSLT 中内置了许多有用的函数,同时,只需要调用 XSLTProcessor 实例的 registerPHPFunctions 方法,我们就可以在 XSLT 中直接使用 PHP 的函数,这大大增强了 XSLT 的处理能
  XSLT 是一个非常方便的转换 XML 的工具,PHP 里面是通过 XSLTProcessor 来实现;XSLT 中内置了许多有用的函数,同时,只需要调用 XSLTProcessor 实例的 registerPHPFunctions 方法,我们就可以在 XSLT 中直接使用 PHP 的函数,这大大增强了 XSLT 的处理能力。
 
  但是,在 XSLT 中使用 PHP 函数时,很多人会遇到如下两种错误:
 
  (1)、Warning: XSLTProcessor::transformToXml(): xmlXPathCompiledEval: 1 objects left on the stack.
 
  (2)、PHP Warning: XSLTProcessor::transformToXml(): xmlXPathCompOpEval: function function bound to undefined prefix php in ….
 
  <?php  
  $xml = <<<EOB  
  <allusers>  
   <user>  
    <uid>bob</uid>  
   </user>  
   <user>  
    <uid>joe</uid>  
   </user>  
  </allusers>  
  EOB;  
  $xsl = <<<EOB  
  <?xml version="1.0" encoding="UTF-8"?>  
  <xsl:stylesheet version="1.0"
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <xsl:output method="html" encoding="utf-8" indent="yes"/>  
   <xsl:template match="allusers">  
    <html><body>  
      <h2>Users</h2>  
      <table>  
      <xsl:for-each select="user">  
        <tr><td>  
          <xsl:value-of  
               select="php:function('ucfirst',string(uid))"/>  
        </td></tr>  
      </xsl:for-each>  
      </table>  
    </body></html>  
   </xsl:template>  
  </xsl:stylesheet>  
  EOB;  
  $xmldoc = DOMDocument::loadXML($xml);  
  $xsldoc = DOMDocument::loadXML($xsl);  
     
  $proc = new XSLTProcessor();  
  $proc->registerPHPFunctions();  
  $proc->importStyleSheet($xsldoc);  
  echo $proc->transformToXML($xmldoc);  
  ?>
  其实,出现这种错误,是因为我们没有定义 PHP namespace,只需要在
 
  <xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  中增加 xmlns:php="http://php.net/xsl" 就能解决此问题, 即
 
  <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:php="http://php.net/xsl"> 

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读