我可以将数组从php传递给xslt包含吗?

时间:2013-05-27 14:47:11

标签: php arrays xslt

我在php中使用以下变量来处理客户ID:

$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变量传递多个客户ID:

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

获取我的XSLT包含语句以检查每个客户ID。

在PHP中,我会将$ k更改为数组并迭代它,但XSLT没有数组的概念。如何获取XSLT包含以检查每个客户ID?

Mayn感谢您的帮助!!

1 个答案:

答案 0 :(得分:1)

唯一要做的就是将contains函数调用的顺序更改为"td:Globale_Pauschale[contains($k,td:CreatedBy)]"。你可以在变量k($k='160177,160176,160184,160178,160179')中得到一个id列表。

但是如果id总是具有相同的长度,这只会起作用。 (如果你还有像16这样的较短的ID,这将不起作用。

要对不同长度的ID进行此操作,请使用以下选择:

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

并在变量k的前端加一个逗号。
$k=',160177,160176,160184,160178,160179,16,'