【问题标题】:IE 11/XSLT/XML - BUGIE 11/XSLT/XML - 错误
【发布时间】:2013-12-03 22:43:32
【问题描述】:

由于 IE 11 更新,我遇到了一个刚刚开始的问题。在 IE 9,10、FF 和 Chrome 中一切正常。

我知道它来自 xml 节点 (partdesc) 值,因为值中有空格 (CSP 100-130)。我尝试使用双引号,我尝试替换单引号以确保它们是正确的。如果我更改 XML 数据以删除空间,IE 11 不会抱怨。我检查了空间以确保它是 ascii 32,并且我尝试以各种方式对 xml 进行编码。到目前为止,除了删除空间之外,我没有尝试过任何尝试。

确切的未终止字符串常量错误(来自 IE 调试器)
SCRIPT1015:未终止字符串常量
文件:SFCPacking,行:1,列:43

生成的 HTML 看起来不错,但是一旦出现未终止的字符串常量错误,点击事件将不起作用。

生成的 HTML:

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

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

任何帮助将不胜感激!

XML 数据如下所示:

<?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 部分:

 <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 (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       

【问题讨论】:

  • 为了更新这一点,我能够确定 IE11 和 XSLT 转换将任意换行符放入数据 它导致了这个错误。现在,如何解决?

标签: xml xslt internet-explorer-11


【解决方案1】:

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

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

【讨论】:

  • 是的,这些也是。 responseText 里面也有 cr/lf。作为 XML 或 HTML 的 msxml 文档 responseType 没有改变任何内容。
  • @user3063475 你也可以尝试在调用.send() 方法之前添加xhttp.responseXML.preserveWhiteSpace = true; 吗?
  • 是的,也这样做了,但没有效果。
  • Gaby,我们修改了您提到的 URL,将 responseType 设置为 msxml-document 确实解决了问题,但实际上返回了 responseXML,就像使用 MSXML 格式一样。使用旧的 msxml activex 对象也 wokrs 这本质上是一样的。我仍然需要了解如何使用 xslt 正确转换新的 responseXML。感谢您的帮助
【解决方案2】:

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

xhttp = (window.ActiveXObject) ? (new ActiveXObject("Msxml2.XMLHTTP")) : (new XMLHttpRequest())

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

将代码更改为 try and catch 语法很容易,但更大的问题是,一旦 MS 决定摆脱旧的 ActiveX 对象,XMLHttpRequest 对象是否会继续在 responseXML 正文中添加任意 cr\lf .这会导致 XSLT 转换出现问题。

【讨论】:

    【解决方案3】:
    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 2013-12-11
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 2015-01-09
      相关资源
      最近更新 更多