0

ie9 以降のバージョンで xslt を使用して、xml ドキュメントを別の xml ドキュメントに変換する必要があります。

IE9 で xslt を使用して xml ドキュメントを変換しようとしています。transformNode() 関数を使用すると、ie8(code:: resultDocument = XML.transformNode(XSL);) で正常に動作しますが、ie9 では transformNode 関数が定義されておらず、エラーが表示されます:: SCRIPT438: オブジェクトはプロパティまたはメソッドをサポートしていません ' transformNode'

以下に示すように、ie9の解決策を見つけました

if (window.ActiveXObject) {
                console.log('inside hi');
                var xslt = new ActiveXObject("Msxml2.XSLTemplate");
                var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
                xslDoc.loadXML(xsltDoc.xml);
                console.log(xslt.styleSheet);
                xslt.stylesheet = xslDoc;
                var xslProc = xslt.createProcessor();
                xslProc.input = xmlDoc;
                xslProc.transform();
                return xslProc.output;
            }

しかし、これを実行するとエラーが発生します: SCRIPT16389: スタイルシートにドキュメント要素が含まれていません。スタイルシートが空であるか、整形式の XML ドキュメントではない可能性があります。

私はjavascript/jqueryが初めてです。誰でもこれを解決するのを手伝ってくれませんか。javascript または jquery に他の関数がある場合は、それが役立ちます。

前もって感謝します

4

2 に答える 2

1

以前のバージョンの IE では、responseXMLドキュメントは MSXML DOM ドキュメントであり、MSXML は XSLT とtransformNode. 新しい IE バージョンでは、ドキュメントは IE DOM ドキュメントを提供し、IE は XSLT とその DOM ドキュメント/ノードをresponseXML実装していません。transformNodeまた、IE DOM ドキュメントには、xmlで使用しようとしているプロパティがありませんxslDoc.loadXML(xsltDoc.xml);

コードのその部分を次のように変更してみてください

if (typeof XMLSerializer !== 'undefined') {
  xslDoc.loadXML(new XMLSerializer().serializeToString(xsltDoc));
  // now use xslDoc here
}

xslDoc.loadXML(xmlHttp.responseText);XMLHttpRequest にまだアクセスできる場合は、別のオプションを使用できます。MSXML responseXML を取得するオプションもあります。http://blogs.msdn.com/b/ie/archive/2012/07/19/xmlhttprequest-responsexml-in-ie10-release-previewtry { xhr.responseType = 'msxml-document'; } catch(e){}の行を参照してください。 aspx

コード内のオブジェクト チェックへのアプローチ全体が間違っています。使用するオブジェクト、プロパティ、またはメソッド (例: if (typeof XSLTProcessor !== 'undefined') { // now use XSLTProcessor here }) をチェックし、 のような完全に異なるオブジェクトをチェックしませんdocument.implementation

于 2013-09-16T12:24:06.727 に答える
0

私もSCRIPT16389: The stylesheet does not contain a document element. The stylesheet may be empty, or it may not be a well-formed XML documentIE9/10/11でエラーが発生しました。次の修正が見つかりました:

あなたのコード:

if (window.ActiveXObject) {
    console.log('inside hi');
    var xslt = new ActiveXObject("Msxml2.XSLTemplate");
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");

    xslDoc.loadXML(xsltDoc.xml);

    console.log(xslt.styleSheet);
    xslt.stylesheet = xslDoc;
    var xslProc = xslt.createProcessor();
    xslProc.input = xmlDoc;
    xslProc.transform();
    return xslProc.output;
 }

作業コード:

if (window.ActiveXObject) {
    console.log('inside hi');
    var xslt = new ActiveXObject("Msxml2.XSLTemplate");
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");

    xslDoc.load(xsltDoc);

    console.log(xslt.styleSheet);
    xslt.stylesheet = xslDoc;
    var xslProc = xslt.createProcessor();
    xslProc.input = xmlDoc;
    xslProc.transform();
    return xslProc.output;
 }

変更は 6 行目です。'loadXML' を 'load' に、'xsltDoc.xml' を 'xsltDoc' に置き換えます。それがどうなるか教えてください!

于 2013-10-04T17:04:08.823 に答える