2011-03-30 38 views
1

給定以下代碼(並且不使用jQuery) 在轉換之前動態地將標籤插入xsl會有什麼好的方法?我希望有人來「修復」功能addParam如何在轉換之前向xsl樣式表中添加/插入xsl:param?

function addParam(xsl,name,value) { 

/** input: 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
    <xsl:template match="/">..... 

output: 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
    <xsl:param name="parm1" value="parameter number 1" />  
    <xsl:template match="/">..... 
*/ 

    var parameter = document.createElement("xsl:param"); 
    parameter.setAttribute("name",name); 
    parameter.setAttribute("value",value); 
    xsl.documentElement.insertBefore(parameter,xsl.documentElement.firstsChild) 

} 

function displayResult(pXml) { 
    var xsl = loadXMLDoc("cdcatalog.xsl"); 
    // code for IE 
    if (window.ActiveXObject) { 

    /* I want to call it here >>> */ 
     addParam(xsl,"parm1","parameter value1"); 

     var ex = pXml.transformNode(xsl); 
     document.getElementById("availableSearchItems").innerHTML = ex; 
    } 
    // code for Mozilla, Firefox, Opera, Chrome, etc. 
    else if (document.implementation && document.implementation.createDocument) { 
     xsltProcessor = new XSLTProcessor(); 
     xsltProcessor.importStylesheet(xsl); 

    /* I want to call it here */ 
     addParam(xsl,"parm1","parameter value1"); 

     resultDocument = xsltProcessor.transformToFragment(pXml, document); 
     document.getElementById('availableSearchItems').innerHTML = ""; 
     document.getElementById("availableSearchItems").appendChild(resultDocument); 
    } 
} 

我已閱讀how to pass a parameter from an URL to a XSL stylesheet using jQuery?並瞭解火狐可以做的setParameter和IE能做

var strParam = "//xsl:param[@name='" + p + "']"; 
var xslParam = xObj.selectSingleNode(strParam);      
xslParam.setAttribute("select",op[p]); 

但是這是假設的XSL具有參數了。

指針和更正非常受歡迎。 謝謝

+0

對我而言不清楚你是否想在xml樣式表中插入一個'xsl:param'元素?或者你想爲正在運行的轉換設置此參數嗎? – 2011-03-30 13:08:06

+0

我想在使用之前更改現有的xsl – mplungjan 2011-03-30 15:53:35

+0

AFAIK,沒有標準的方法將參數傳遞給XSLT樣式表。例如,我知道撒克遜人有特定實現方式來實現這一點。 – 2012-05-21 21:11:28

回答

1

爲什麼你想改變xsl中的參數名?當然,這可能是靜態的,你改變了這個參數的值是什麼?然後,您可以設置您想要傳入JavaScript中的xsl的內容,並以此方式執行此操作並輕鬆實現。

<xsl:param name="parm1"/> 

然後,當您調用add和set參數函數時獲得一個值,如下所示。你甚至可以在通過之前測試它以確保它不爲空。

//code for ie 
if (window.ActiveXObject) 
{ 
    var xslt = new ActiveXObject("MSXML2.FreeThreadedDOMDocument"); 
    xslt.async = false; 
    xslt.load(xsl); 
    var template = new ActiveXObject("MSXML2.XSLTemplate"); 
    template.stylesheet = xslt; 
    var process = template.createProcessor(); 
    process.input = xml; 
    if(yourparam != ""){ 
     process.addParameter("paramID", yourparam); 
    } 
    process.transform(); 
} 
// code for Mozilla, Firefox, Opera, etc. 
else if (document.implementation && document.implementation.createDocument) 
{ 
    var xml_serializer = new XMLSerializer(); 
    xsltProcessor=new XSLTProcessor(); 
    xsltProcessor.importStylesheet(xsl); 
    if(yourparam != ""){ 
     xsltProcessor.setParameter(null, "paramID", yourparam); 
    } 
} 
+0

我很抱歉,我不記得一年前我爲什麼想這樣做,但我相信它與動態語言環境嗅探或類似情況有關。它有道理然後 – mplungjan 2012-06-15 20:05:37

+0

對不起,沒有閱讀時,從什麼職位。 :-S – 2012-06-19 15:31:18

相關問題