Я использую PHP XML и XSL для генерации документов. Если вы знакомы с реализацией PHP, вы можете знать, что функция XSL tokenize (string, pattern) недоступна. Я пытаюсь реализовать эту функцию в PHP, чтобы ее можно было вызывать из XSL, например:
<xsl:value-of select="php:function('tokenize','aaa bbb ccc',' ')[last()]"/>
, который должен выдавать 'ccc'
Проблема в том, что я не могу найти способ вернуть коллекцию узлов, состоящую из простых строк, в XSL. Когда я пытаюсь отправить DOMNodeList, я получаю сообщение об ошибке «Объект PHP не может быть преобразован в строку XPath». Приемы написания функций расширения XSL в PHP не описаны в руководстве по PHP. Могут ли некоторые гуру пролить свет на это?
Вот моя текущая работа. Я могу сделать следующее в XSL
<xsl:value-of select="php:function('tokenizeIntoXML',$stop_at_class,' ')/node()[last()]"/>
с этой функцией PHP
function tokenizeIntoXML($string, $delimiter)
{
$ret = null;
$toks = explode($delimiter, $string);
if(!empty($toks))
{
$xml = new DomDocument();
$xml -> loadXML("<result/>");
foreach($toks as $t)
{
$xml -> documentElement -> appendChild(new DOMText($t));
}
return $xml -> documentElement;
}
return $ret;
}