我遇到使用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>
有什么想法吗?我确信我拥有所需的所有进口并正确使用它们,但如果有人能告诉我哪里或哪里出错了,那就太好了。提前谢谢。
答案 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
属性指定前缀列表,并且在文字结果元素上排除(不复制)绑定到这些前缀的名称空间。