首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IE 11/XSLT/XML - BUG

IE 11/XSLT/XML - BUG
EN

Stack Overflow用户
提问于 2013-12-03 22:43:32
回答 3查看 7.2K关注 0票数 2

我有一个问题,刚刚开始,因为一个IE 11更新。所有的工作在IE 9,10,FF和Chrome。

我知道它来自xml节点(partdesc)值,因为值中有一个空格(CSP 100-130)。我试过使用双引号,我试着替换单引号,以确保它们是正确的。如果我更改XML数据以删除空间,IE11就不会抱怨。我检查了这个空间,以确保它是ascii 32,并尝试以各种方式对xml进行编码。在这一点上,除了移除空间外,没有什么是有效的。

未终止的字符串常量错误(来自IE调试器)

SCRIPT1015:未终止字符串常量

文件: SFCPacking,行: 1,列: 43

生成的HTML看起来很好,但是一旦出现未终止的字符串常量错误,单击事件将无法工作。

结果HTML:

代码语言:javascript
复制
  <a href="javascript:void(0);" onclick="showCreate('98522000000000000000000','CSP 105-140','7500','4167','9595')"> - create ticket - </a>

我有从后端返回的XML数据,该后端使用XSLT解析器进行转换。解析器不会抛出任何错误,XML文档阅读器也不会抛出任何错误。

任何帮助都是非常感谢的!

XML数据如下所示:

代码语言:javascript
复制
<?xml version="1.0"?>

<!DOCTYPE XMLUtilResults>
<XMLUtilResults>
   <readonly>0</readonly>
   <canapprove>1</canapprove>
   <sfcsec>4</sfcsec>
   <srsec>4</srsec>
   <tsec>4</tsec>
   <view>Open</view>
   <packparts>
       <part recid="IDX985110000000000000000009595">
          <partno>98511000000000000000000</partno>
          <partdesc>CSP 100-130</partdesc>
          <availqty>3758</availqty>
          <onhand>3758</onhand>
          <invlocid>9595</invlocid>
          <invloc>0005</invloc>
          <invlocname>NACO Plant</invlocname>
          <qtypacked/>
          <sfcqty/>
          <opendemand/>
          <moq>7500</moq>
        </part>
     </packparts>
  <success>1</success>
  <OpenTickets>1</OpenTickets>
</XMLUtilResults>

发生错误的XSLT部分:

代码语言:javascript
复制
 <a href="javascript:void(0)">
    <xsl:attribute name="onclick">showCreate('<xsl:value-of select="partno"/>','<xsl:value-of  select="partdesc"/>','<xsl:value-of select="moq"/>','<xsl:value-of select="availqty"/>','<xsl:value-of select="invlocid"/>')</xsl:attribute>
     - create ticket -
</a>

转换XML的JavaScript (XSLT)

代码语言:javascript
复制
var xml = new ActiveXObject("MSXML2.DomDocument.3.0");
xml.async = false;
xml.setProperty("ProhibitDTD", false);
xml.load(xmlResp);

var xsl = new ActiveXObject("MSXML2.FreeThreadedDomDocument.3.0");
xsl.async = false;
xsl.load(xslFile);

xsl_template = new ActiveXObject("Msxml2.XSLTemplate")
xsl_template.stylesheet = xsl;

xslProc = xsl_template.createProcessor()
xslProc.input = xml

if(paramObj){
    for(i=0;i<paramObj.pName.length;i++){
        xslProc.addParameter(paramObj.pName[i], paramObj.pValue[i])
    }
}

xslProc.transform()
document.getElementById(targetObj).innerHTML = xslProc.output       
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-04 17:29:13

读取http://blogs.msdn.com/b/ie/archive/2012/07/19/xmlhttprequest-responsexml-in-ie10-release-preview.aspx

并在发送请求之前尝试使用responseText或将responseType设置为'msxml-document'

票数 3
EN

Stack Overflow用户

发布于 2013-12-04 17:12:14

此问题源于微软的新XMLHTTPRequest (截至IE10)在原始responseXML不具有cr\lf的情况下在responseXML主体中添加任意cr\lf (\r\n)。这在IE11中才刚刚开始发生,因为IE11在检查window.ActiveXObject时似乎不再返回True。请注意:我们实例化对象的代码如下:

代码语言:javascript
复制
xhttp = (window.ActiveXObject) ? (new ActiveXObject("Msxml2.XMLHTTP")) : (new XMLHttpRequest())

IE10中的修正是继续使用旧的Msxml2.XMLHTTP ActiveX对象,但是由于IE11现在返回window.ActiveXObject的false,所以它使用的是XMLHTTPRequest。

很容易将代码更改为try和catch语法,但更大的问题是,一旦MS决定删除旧的ActiveX对象,XMLHttpRequest对象是否会继续在responseXML主体中添加任意cr\lf。这就产生了XSLT转换的问题。

票数 1
EN

Stack Overflow用户

发布于 2016-03-09 13:52:14

代码语言:javascript
复制
var ie = 0;
if (window.ActiveXObject || Object.getOwnPropertyDescriptor(window, "ActiveXObject")) {
    ie = 1;
}
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = onReady;
xhr.open('get', '/test.xml', true);
if (ie) {
    try { xhr.responseType = 'msxml-document'; } catch(e){} // \r\n fix
}
xhr.send(null);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20363235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档