2

ナビゲーション メニューで使用するために、パラメーターを xsl テンプレートに追加しようとしています。

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"));

     }
}

どんな助けでも大歓迎です、乾杯。

4

1 に答える 1

0

Mozilla では XSLT と DOM の間でノードを交換できますが、IE では XSLT 変換結果を文字列として取得し、それを IE の HTML パーサーにフィードする必要があります。だからあなたのサンプルのために私はあなたが欲しいと思う

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

scriptHookこれにより、要素が変換の結果に置き換えられます。

于 2012-10-12T09:04:29.127 に答える