2011-09-18 104 views
1

我有一個使用PHP 5的XSLTProcessor來處理下面的XML文檔的問題。這個問題不是由XSLT處理的輸出,而是html輸出的元素得到了xmlns:php =「http://php.net/xsl」添加到他們。下面是一個例子。PHP 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> 

任何想法?我確定我有我需要的所有進口產品,並正確使用它們,但如果有人能告訴我什麼或我要去哪裏出錯,那就太好了。提前致謝。

回答

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屬性指定前綴列表並綁定到這些前綴命名空間將被排除(不復制)的字面結果元素。

+0

謝謝soooo,它實際上是導致問題的'extension-element-prefixes'元素。這固定了一切。 – ars265

+0

@ ars265:不客氣。 –