PHP XSL输出问题

时间:2011-09-18 22:58:00

标签: php xml xslt php-5.3

我遇到使用PHP 5的XSLTProcessor来操作以下XML文档的问题。问题不在于XSLT正在处理的输出,而是html输出的元素正在添加 xmlns:php =“http://php.net/xsl”。下面是一个例子。

PHP:

$xmldoc = DOMDocument::load($xml);
$xsldoc = DOMDocument::load($xslt);
$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStyleSheet($xsldoc);
echo $proc->transformToXML($xmldoc);

XML:

<allusers>
 <user>
  <uid>bob</uid>
 </user>
 <user>
  <uid>tom</uid>
 </user>
</allusers>

XSLT:

 <?xml version="1.0"?>
 <xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:php="http://php.net/xsl"
  xsl:extension-element-prefixes="php">

 <xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>

 <xsl:template match="allusers">
  <h2>Users</h2>
  <table>
   <xsl:for-each select="user">
   <tr><td>
    <xsl:value-of select="php:function ('MyClass::firstLetter',string(.))"/>
   </td></tr>
   </xsl:for-each>
  </table>
 </xsl:template>

 </xsl:stylesheet>

奇数输出(注意 xmlns:php =“http://php.net/xsl”):

<!DOCTYPE html> 
<html> 
<head></head>
<body>
 <h2 xmlns:php="http://php.net/xsl">Users</h2>
 <table xmlns:php="http://php.net/xsl">
  <tr><td>b</td></tr>
  <tr><td>t</td></tr>
 </table>
</body>
</html>

有什么想法吗?我确信我拥有所需的所有进口并正确使用它们,但如果有人能告诉我哪里或哪里出错了,那就太好了。提前谢谢。

1 个答案:

答案 0 :(得分:3)

 <xsl:stylesheet version="1.0"    
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"   
  xmlns:php="http://php.net/xsl"   
  xsl:extension-element-prefixes="php">

您需要添加

 exclude-result-prefixes="php" 

exclude-result-prefixes属性指定前缀列表,并且在文字结果元素上排除(不复制)绑定到这些前缀的名称空间。