2014-09-13 276 views
0

我想將當前頁面URL作爲屬性傳遞給XSL模板。據我瞭解,它應該作爲參數傳遞,然後用作屬性。將URL作爲參數傳遞給XSL

我用PHP來加載XML & XSL文件:

<?php 
$xml = new DOMDocument; 
$xml->load('main.xml'); 

$xsl = new DOMDocument; 
$xsl->load('blocks/common.xsl'); 

$proc = new XSLTProcessor; 

$proc->importStyleSheet($xsl); 

echo $proc->transformToXML($xml); 
?> 

如何把這個代碼進行修改,以通過URL爲一個名爲「當前的URL」,例如參數?

我在這裏看到很多類似的問題,有不同的解決方案,但目前爲止還沒有人爲我工作。先謝謝你。

回答

1

也許你已經嘗試過這種方法,但在情況下,如果沒有:

<?php 

    $params = array('current-url' => $_SERVER['REQUEST_URI']); 

    $xml = new DOMDocument; 
    $xml->load('main.xml'); 

    $xsl = new DOMDocument; 
    $xsl->load('blocks/common.xsl'); 

    $proc = new XSLTProcessor; 
    $proc -> registerPHPFunctions(); 
    $proc->importStyleSheet($xsl); 

    foreach ($params as $key => $val) 
    $proc->setParameter('', $key, $val); 

    echo $proc->transformToXML($xml); 
    ?> 

在XSL,加上上面的模板

<xsl:param name="current-url" /> 

在模板中,你可以使用

<xsl:value-of select="$current-url" /> 

如果不是已經存在,則必須將xmlns:php="http://php.net/xsl"添加到xsl:stylesheet dec laration。
供參考:registerPHPFunctions()和您可能已經檢查過的解決方案SO:Passing variables to XSLT

+0

謝謝matthias_h。現在嘗試了這一點,但我得到了'調用一個成員函數setParameter()在一個非線程28上的非對象'$ xsltProcessor-> setParameter('',$ key,$ val);'不能圖它出來了,你有什麼想法嗎? – 2014-09-13 19:18:45

+0

剛剛更新了答案 - 發生了複製/粘貼錯誤。它應該是$ proc-> setParameter(...而不是$ xsltProcessor-> setParameter(.. – 2014-09-13 19:31:58

+0

謝謝,這工作。 – 2014-09-13 20:08:42