ユーザ用ツール

サイト用ツール


javascript:xslt

JavaScriptでXSLT処理

いくつかのブラウザではJavaScriptでXSLTを使う事ができます。XMLHttpRequestで取得したレスポンスXMLデータをXSLTを用いてHTMLに変換するコードを紹介します。

IE6以降

ActiveXのXMLDOMオブジェクトを使用してXSLTファイルを取得し、responseXMLに対して適用します。

var xmlhttp =  new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange = readystatechange;
xmlhttp.open("GET", "hoge.xml", true);
xmlhttp.send(null);
 
function readystatechange(){
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var xml = xmlhttp.responseXML;
 
        var xslt =  new ActiveXObject("Microsoft.XMLDOM");
        xslt.async = false;
        xslt.load("hoge.xsl");
        var text = xml.transformNode(xslt);
 
        document.all("target").innerHTML = text;
    }
}

XSLTによって生成したHTMLは普通の文字列であるため、innerHTMLプロパティを使ってHTMLに埋め込むことができます。

Firefox

XSLTProsessorオブジェクトを使います。

var xmlhttp =  new XMLHttpRequest();
xmlhttp.onreadystatechange = readystatechange;
xmlhttp.open("GET", "hoge.xml", true);
xmlhttp.send(null);
 
function readystatechange(){
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var xml = xmlhttp.responseXML;
 
        var xslt = new XSLTProcessor();
        var xsltDoc =  document.implementation.createDocument("", "", null);
        xsltDoc.async = false;
        xsltDoc.load("hoge.xsl")
        xslt.importStylesheet(xsltDoc);
 
        var fragment = document.implementation.createDocument("", "", null);
        var doc =  xslt.transformToFragment(xml, fragment);
 
        var target = document.getElementById("target")
        while (target.hasChildNodes()) {
            target.removeChild(target.lastChild);
        }
        target.appendChild(doc);
    }
}

Firefoxでは、XSLTによって生成したHTMLはDOMオブジェクトとなっているのでappendChildメソッドでセットできます。XSLTのロードもXMLHttpRequest同様にクロスドメインの制限を受けるため、XSLファイルも同一ドメインに設置しなくてはなりません。

javascript/xslt.txt · 最終更新: 2016/09/22 10:39 by nullpon