Интересно, как и как можно зарегистрировать функцию пользовательского пространства PHP с XSLT-процессором, который может не только взять массив узлов, но и вернуть его?
В настоящий момент PHP жалуется на преобразование массива в строковое преобразование с использованием общей настройки:
function all_but_first(array $nodes) {
array_shift($nodes);
shuffle($nodes);
return $nodes;
};
$proc = new XSLTProcessor();
$proc->registerPHPFunctions();
$proc->importStylesheet($xslDoc);
$buffer = $proc->transformToXML($xmlDoc);
Преобразование XMLDocument ($xmlDoc
) может, например, быть:
<p>
<name>Name-1</name>
<name>Name-2</name>
<name>Name-3</name>
<name>Name-4</name>
</p>
В таблице стилей он называется так:
<xsl:template name="listing">
<xsl:apply-templates select="php:function('all_but_first', /p/name)">
</xsl:apply-templates>
</xsl:template>
Уведомление следующее:
Примечание. Преобразование массива в строку
Я не понимаю, почему, если функция получает массив, поскольку вход не может также возвращать массив?
Я также пытался использовать другие имена функций, поскольку я видел, что есть php:functionString
, но все попытки до сих пор (php:functionArray
, php:functionSet
и php:functionList
) не работали.
В написанном PHP руководстве я могу вернуть еще один элемент DOMDocument
, однако эти элементы уже не из исходного документа. Это не имеет большого значения для меня.