2012-10-12 17 views
2

試圖將參數添加到xsl模板以供在導航菜單中使用。從處理器輸出創建對象以追加/ replaceChild

試圖弄清楚如何使用IXSLProcessor留給我的輸出。

我有以下的代碼,完全適用於Firefox的

var xslStylesheet; 
    var xsltProcessor = new XSLTProcessor(); 
    var myDOM; 
    var xmlDoc; 
    var myXMLHTTPRequest = new XMLHttpRequest(); 
    myXMLHTTPRequest.open("GET", "client.xsl", false); 
    myXMLHTTPRequest.send(null); 

    xslStylesheet = myXMLHTTPRequest.responseXML; 
    xsltProcessor.importStylesheet(xslStylesheet); 

    // load the xml file 
    myXMLHTTPRequest = new XMLHttpRequest(); 
    myXMLHTTPRequest.open("GET", "client.xml", false); 
    myXMLHTTPRequest.send(null); 
    xmlDoc = myXMLHTTPRequest.responseXML; 

    // set the parameter using the parameter passed to the outputgroup function 
    xsltProcessor.setParameter(null, "cid", client); 
    xsltProcessor.setParameter(null, "browser", "other"); 
    var fragment = xsltProcessor.transformToFragment(xmlDoc,document); 
    document.getElementById("scriptHook").innerHTML = ""; 
    document.getElementById("maincontent").replaceChild(fragment, document.getElementById("scriptHook")); 
    scroll(0,0); 

這是代碼我有(大部分來自MSDN盜竊)

var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0"); 
var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0"); 
var xslproc; 
xsldoc.async = false; 
xsldoc.load("client.xsl"); 
if (xsldoc.parseError.errorCode != 0) { 
    var myErr = xsldoc.parseError; 
    WScript.Echo("You have error " + myErr.reason); 
} else { 
    xslt.stylesheet = xsldoc; 
    var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
    xmldoc.async = false; 
    xmldoc.load("client.xml"); 
    if (xmldoc.parseError.errorCode != 0) { 
     var myErr = xmldoc.parseError; 
     WScript.Echo("You have error " + myErr.reason); 
    } else { 
     xslproc = xslt.createProcessor(); 
     xslproc.input = xmldoc; 
     xslproc.addParameter("cid", client); 
     xslproc.addParameter("browser", "ie"); 
     xslproc.transform(); 

     //somehow convert xslproc.output to object that can be used in replaceChild 

     document.getElementById("scriptHook").innerHTML = ""; 
     document.getElementById("maincontent").replaceChild(xslproc.output, document.getElementById("scriptHook")); 

    } 
} 

任何和所有幫助表示讚賞,歡呼聲。

回答

0

使用Mozilla,您可以在XSLT和DOM之間交換節點,但使用IE您需要將XSLT轉換結果作爲字符串並將其提供給IE的HTML解析器;所以您的樣品我想你想

document.getElementById("scriptHook").outerHTML = xslproc.output; 

將與轉換的結果更換scriptHook元素。

+0

outerHTML eh?我以前沒有遇到過,這是一個MSXML專屬會員嗎? 非常感謝您的答覆,將它放進去,看看它在哪裏做的伎倆。 – user1740125

+0

太棒了,做到了。爲什麼我沒有想到這超出了我!隊友的歡呼聲。 – user1740125

+0

'outerHTML'是自IE 4以來的IE/MSHTML DOM中的一個屬性,我認爲現在也受到其他瀏覽器的支持,Firefox/Mozilla是最後一個https://developer.mozilla.org/en-US/docs /DOM/element.outerHTML來介紹它(據推測,因爲HTML5指定它http://www.w3.org/TR/html5/apis-in-html-documents.html#outerhtml)。 –