javascript - Xsl TransformToDocument 不能在 Chrome 浏览器中工作,但可以在 Firefox 中工作

标签 javascript java xml xslt dom

我通过调用一个 URL 来获取 xsl,并解析我正在使用下面的代码片段的 xml。

var xslt = getXSLTemplate(xslUri, params, xmlDoc);
    if (!xslt) {
        xslt = createXSLTemplateGeneric(xslUri, params, xmlDoc);
        if (xslt) {
            putXSLTemplate(xslUri, xslt);
        }
    }
    if (xslt) {
        xslt.clearParameters();
        var paramName = params[0];
        var paramValue = params[1];
        var result = "";
        for (var paramIdx = 0; paramIdx < paramName.length; paramIdx++) {
            xslt
                    .setParameter("", paramName[paramIdx],
                            paramValue[paramIdx]);
        }
        var transformDoc = xslt.transformToDocument(xmlDoc);
        var xmlSerializer = new XMLSerializer();

        if (transformDoc.firstChild != null) {
            var nodes = transformDoc.lastChild.childNodes;
            for (var i = 0; nodes[i]; ++i) {
                result += xmlSerializer.serializeToString(nodes[i]);
            }
            result = transformDoc.lastChild.xml;
        }
        return result;
    }

但是这段代码在 Firefox 中可以工作,而在 chrome 中则不能工作。 请让我知道我在解析文档时犯了什么错误,或者如果上面的描述不足以进行分析,请告诉我。

我在 chrome 中得到的结果如下

<div xmlns="http://www.w3.org/1999/xhtml" id="alertMessages" style="width:400px;"></div>

在 Firefox 中我得到了正确的结果。

<table xmlns=\"http://www.w3.org/1999/xhtml\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" class=\"panelContentTbl\" style=\"margin-left:14px; margin-top:14px;\"><tbody><tr><td valign=\"top\"><script id=\"doLogin\" cancelifviewbusy=\"\">try{ if(getFormInputByName(\"loginButton\").disabled == false){ var name = trimAll(getFormInputByName(\"username\").value); var pwd = trimAll(getFormInputByName(\"password\").value); if(name.length &gt; 0 &amp;&amp; pwd.length &gt; 0){   disableButton(\"loginButton\"); displayClientStatus(\"Authenticating user...\");  var nameArray = new Array(); var typeArray = new Array(); var valueArray = new Array();   nameArray.push(\"username\"); typeArray.push(TYPE_ATTRIBUTE); valueArray.push(name);   nameArray.push(\"password\"); typeArray.push(TYPE_ATTRIBUTE); valueArray.push(pwd);   loadAsyncPanelAction(\"loginWidget\", getActionUri('client', 'login'), nameArray, typeArray, valueArray, \"checkSecurityAuth(asyncPanelRequest);\");  } else{ panelAlert(\"Please enter your user ID and password.\",\"layouts/layout2010.1/xsl/widget/panel/login.xsl\");} } } catch(anErr){ errorAlert(\"doLogin\", SEVERITY_HIGH, anErr); } </script><script id=\"getPasswordHelp\" cancelifviewbusy=\"\">try{ var name = trimAll(getFormInputByName(\"username\").value); var nameArray = new Array(); var typeArray = new Array(); var valueArray = new Array(); nameArray.push(\"username\"); typeArray.push(TYPE_ATTRIBUTE); valueArray.push(name); displayClientStatus(\"Loading password assistant...\");loadAsyncPanelAction(\"loginWidget\", getActionUri('layout.widget', 'get-password-help'), nameArray, typeArray, valueArray, \"displayClientStatus('');\"); } catch(anErr){ errorAlert(\"getPasswordHelp\", SEVERITY_HIGH, anErr); } </script><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody><tr><td><div id=\"panelHeader\"><table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody><tr class=\"panelHeader\"><td nowrap=\"yes\">User Login</td></tr></tbody></table></div></td></tr><tr><td valign=\"top\" style=\"padding:10px;\"><div id=\"panel\" style=\"330px\"><div style=\"white-space:normal;\"><instructions><span>Please enter your user ID and password.</span></instructions></div><div class=\"inputHeader\"></div><eventhandler id=\"initContent\" handler=\"var fi = getFormInputByName('username'); if (null != fi) fi.focus();\"> </eventhandler><table cellspacing=\"1\" cellpadding=\"0\" border=\"0\" class=\"panelForm\" id=\"loginForm\"><tbody><tr><td id=\"panelLabel\" style=\"width:120px;\">User ID *</td><td nowrap=\"true\" id=\"panelValue\" style=\"width:120;\"><input type=\"text\" id=\"inputProperty\" class=\"inputText\" name=\"username\" size=\"30\" required=\"FALSE\" onselectstart=\"setSelectable(this,true,event);\" ondragenter=\"event.returnValue = false;\" value=\"\" style=\"-moz-user-select:text;width:175pxpx;\" onkeypress=\"clickButtonOnEnter(event, 'loginButton');\" /></td></tr><tr><td id=\"panelLabel\" style=\"width:120px;\">Password *</td><td nowrap=\"true\" id=\"panelValue\" style=\"width:120;\"><input type=\"password\" class=\"inputText\" name=\"password-display\" size=\"30\" value=\"\" onselectstart=\"setSelectable(this,true,event);\" ondragenter=\"event.returnValue = false;\" style=\"-moz-user-select:text;width:175pxpx;\" onchange=\"getFormInputByName('password').value = this.value;\" onkeypress=\"clickButtonOnEnter(event, 'loginButton');\" /><input type=\"hidden\" id=\"inputProperty\" name=\"password\" value=\"\" /><eventhandler id=\"resizeContent\" handler=\"var pwd1 = getFormInputByName('password-display'); var pwd2 = getFormInputByName('password'); if (null != pwd1 &amp;&amp; null != pwd2) pwd1.value = pwd2.value;\"> </eventhandler></td></tr><tr><td id=\"panelLabel\"> </td><td id=\"panelValue\"><table cellspacing=\"0\" cellpadding=\"0\" border=\"0\"><tbody><tr><td nowrap=\"nowrap\" style=\"padding-right:6px;\"><input type=\"submit\" id=\"button\" name=\"loginButton\" value=\"Login\" title=\"\" style=\"width:70px;\" class=\"panelButton\" onclick=\"\n                            if(jQuery(this).hasClass('buttonDisabled') ||\n                            jQuery(this).hasClass('jQueryDisabled')) return;\n                            fireScript('doLogin'); \" /></td></tr></tbody></table></td></tr></tbody></table><div align=\"right\"><table><tbody><tr><td align=\"right\"><a class=\"blue\" style=\"padding-top:8px; cursor:pointer; white-space:nowrap;\" onclick=\"fireScript('getPasswordHelp');\">Forgot your password?</a></td></tr></tbody></table></div></div></td></tr><tr><td valign=\"top\" height=\"100%\" style=\"text-align:center;\" id=\"clientStatus\"></td></tr></tbody></table></td></tr></tbody></table>

任何浏览器都没有崩溃或错误。

最佳答案

这可能取决于您实际获取文档 xmlDoc 的方式。如果使用 ajax 检索文档,确实返回xhttp.responseXML,并且返回xhttp.responseXML.documentElement .

两者都可以使用 XMLSerializer 转换为有意义的文档表示,但只有第一个语句是 XSL 转换的可行参数。

如果使用后者,则在我的情况下(使用 Chrome)XSLTransformation(使用 toDocument 或 toFragment 函数)的返回值为 null

关于javascript - Xsl TransformToDocument 不能在 Chrome 浏览器中工作,但可以在 Firefox 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39423345/

相关文章:

xml - Ruby XML::Builder 元素名称中带有连字符

android - 从 Android (XML) 文档中的节点按标签名称获取元素?

javascript - WebGL 绘制循环和翻译

javascript - 使用 CouchDB 进行前端登录

java - 深度优先搜索遇到 java.lang.OutOfMemoryError

Java检查字符串只允许逗号作为特殊字符

java - 使用 java 链接 XML 和 XSD

javascript - 我的 mvc 项目中的 jquery 结构

javascript - 如何将相同的 JQuery 应用于两个导航并为每个导航添加不同的类

java - 如何将 native 库和 JNI 库捆绑到 JAR 中?