Могу ли я передать массив из php в xslt содержит?

Я использую следующую переменную в php для обработки идентификатора клиента:

$k='160177'

который я передаю в мой xslt, используя:

...
$xsl = $proc->importStylesheet($xsl);
$xsl = $proc->setParameter('', 'k', $k);
$newdom = $proc->transformToDoc($inputdom);
print $newdom->saveXML();

Я беру переменную в своем XSLT и использую ее для проверки узла:

...
<xsl:apply-templates select="td:Globale_Pauschale[contains(td:CreatedBy, $k]">

Это работает нормально, но теперь мне нужно передать несколько идентификаторов клиентов через мою переменную php:

$k='160177,160176,160184,160178,160179....etc'

И получите мой XSLT содержит оператор для проверки с КАЖДЫМ идентификатором клиента.

В PHP я бы изменил свой $k на массив и перебрал его, но XSLT не имеет понятия о массиве. Как я могу получить XSLT-содержимое для проверки с КАЖДЫМ идентификатором клиента?

Майн, спасибо за любую помощь!

1 ответ

Решение

Единственное, что нужно сделать, это изменить порядок вызова функции "td:Globale_Pauschale[contains($k,td:CreatedBy)]", Чем вы можете иметь список идентификаторов в переменной k ($k='160177,160176,160184,160178,160179').

Но это будет работать надежно, только если идентификаторы всегда имеют одинаковую длину. (Это не будет работать, если у вас есть также более короткие идентификаторы, такие как 16).

Чтобы сделать это для идентификаторов различной длины, используйте следующую команду:

select="td:Globale_Pauschale[contains($k, 
            concat(',', normalize-space(td:CreatedBy), ','))]"

и поставьте запятую в начале и конце переменной k.
$k=',160177,160176,160184,160178,160179,16,'

Другие вопросы по тегам