Home >php教程 >php手册 >XSLTProcessor 中 registerPHPFunctions 后无法调用 php 函数

XSLTProcessor 中 registerPHPFunctions 后无法调用 php 函数

WBOY
WBOYOriginal
2016-05-25 16:53:031888browse

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(&#39;ucfirst&#39;,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">


教程地址:

欢迎转载!但请带上文章地址^^

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn