Проблема с выходом PHP XSL - PullRequest
       31

Проблема с выходом PHP XSL

1 голос
/ 19 сентября 2011

У меня проблема с использованием 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 Ответ

3 голосов
/ 19 сентября 2011
 <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 обозначает список префиксов, и пространства имен, связанные с этими префиксами, должны быть исключены (не скопированы) в элементах литеральных результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...