如何从TextArea对XML执行XSLT转换

时间:2017-11-21 13:35:33

标签: javascript xml xslt

我正在努力在浏览器中使用html和javascript执行XSLT转换(我尝试了很多不同的方法,但没有一个工作)。这就是我想要的(我只是不能让它发挥作用)。

1)我有一个XSLT转换,我可以将它作为文件(例如xslt)提供,我可以将它嵌入HTML(我不在乎),它是静态的。

2)我希望用户将XML输入文本区域。

3)我希望用户按下一个按钮然后我想要XSLT发生,结果(这是html)将显示在一个新选项卡中。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

最后得到了我自己的javascript工作。这里适合任何需要它的人。

/**
 * Load an XML document from server
 *
 * @param filename      filename
 * 
 * @return DOMDocument
 */
function loadXMLDoc(filename) {

    if ((window.ActiveXObject) || (!(window.ActiveXObject) && "ActiveXObject" in window)) {
            xhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    else {
        xhttp = new XMLHttpRequest();
    }
    xhttp.open("GET", filename, false);
    try {
        xhttp.responseType = "msxml-document"
    }
    catch (err) { } // Helping IE11
    xhttp.send("");
    return xhttp.responseXML;
}


/**
 * Text XML template: perform XSLT on user XML
 *
 */
function testXMLTemplate() {

    // create xml string from user xml in text area
    var xmlstr = document.getElementById("test-xml").value;
    xmlstr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + xmlstr;

    // load XSLT doc
    var xsldoc = loadXMLDoc("xml/paramToHtml.xslt")

    if ((window.ActiveXObject) || (!(window.ActiveXObject) && "ActiveXObject" in window)) {
        // code for IE
        var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
        xmldoc.async = false;
        xmldoc.loadXML(xmlstr);

        ex = xmldoc.transformNode(xsldoc);
        var xmlTestWin = window.open();
        xmlTestWin.document.write(ex);
    }
    else if (document.implementation && document.implementation.createDocument) {
        // code for Chrome, Firefox, Opera, etc.
        var xmlparser = new DOMParser();
        var xmldoc = xmlparser.parseFromString(xmlstr, "text/xml");

        xsltProcessor = new XSLTProcessor();
        xsltProcessor.importStylesheet(xsldoc);
        resultDocument = xsltProcessor.transformToDocument(xmldoc);

        var xmlTestWin = window.open();
        xmlTestWin.document.write(resultDocument.firstChild.innerHTML);
    }
}