XSLTProcessor::registerPHPFunctionNS

(PHP >= 8.4.0)

XSLTProcessor::registerPHPFunctionNSРегистрирует PHP-функцию как XSLT-функцию с пространством имён

Описание

public function XSLTProcessor::registerPHPFunctionNS(string $namespaceURI, string $name, callable $callable): void

Метод разрешает вызывать PHP-функцию как XSLT-функцию с пространством имён в таблицах стилей в формате XSL.

Список параметров

namespaceURI
URI-идентификатор пространства имён.
name
Локальное название функции внутри пространства имён.
callable
PHP-функция, которую требуется вызвать при вызове XSL-функции внутри таблицы стилей. Список узлов передаётся в callback-функцию в виде массива, элементы которого соответствуют DOM-узлам.

Ошибки

  • Метод выбрасывает ошибку ValueError, если название callback-функции недопустимо.
  • Метод выбрасывает ошибку ValueError, если аргумент options содержит недопустимые параметры.
  • Метод выбрасывает ошибку ValueError, если в аргументе overrideEncoding передали неизвестную кодировку.
  • Метод выбрасывает ошибку TypeError, если значение для обратного вызова не принадлежит типу callable.

Возвращаемые значения

Функция не возвращает значения после выполнения.

Примеры

Пример #1 Пример вызова PHP-функции из таблицы стилей

<?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"
    xmlns:my="urn:my.ns">
<xsl:output method="html" encoding="utf-8" indent="yes"/>
<xsl:template match="allusers">
 <html><body>
   <h2><xsl:value-of select="my:count(user/uid)" /> users</h2>
   <table>
   <xsl:for-each select="user">
     <tr>
      <td>
       <xsl:value-of select="my:uppercase(string(uid))"/>
      </td>
     </tr>
   </xsl:for-each>
   </table>
 </body></html>
</xsl:template>
</xsl:stylesheet>
EOB;

$xmldoc = new DOMDocument();
$xmldoc->loadXML($xml);

$xsldoc = new DOMDocument();
$xsldoc->loadXML($xsl);

$proc = new XSLTProcessor();
$proc->registerPHPFunctionNS('urn:my.ns', 'uppercase', strtoupper(...));
$proc->registerPHPFunctionNS('urn:my.ns', 'count', fn (array $arg1) => count($arg1));
$proc->importStyleSheet($xsldoc);
echo $proc->transformToXML($xmldoc);

?>

Смотрите также