Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IE 11/XSLT/XML-BUG_Xml_Xslt_Internet Explorer 11 - Fatal编程技术网

IE 11/XSLT/XML-BUG

IE 11/XSLT/XML-BUG,xml,xslt,internet-explorer-11,Xml,Xslt,Internet Explorer 11,我有一个问题,刚开始由于一个IE 11更新。一切都在IE 9、10、FF和Chrome中工作 我知道它来自xml节点partdesc值,因为值CSP 100-130中有一个空格。我尝试过使用双引号,我尝试过替换单引号以确保它们是正确的。如果我更改XML数据以删除空间,IE 11不会抱怨。我检查了空格以确保它是ascii 32,并尝试了各种方式对xml进行编码。在这一点上,除了移除空间,我尝试过的其他方法都不起作用 确切的未终止字符串常量错误来自IE调试器 SCRIPT1015:未终止的字符串常量

我有一个问题,刚开始由于一个IE 11更新。一切都在IE 9、10、FF和Chrome中工作

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

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

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

生成的HTML:

  <a href="javascript:void(0);" onclick="showCreate('98522000000000000000000','CSP 105-140','7500','4167','9595')"> - create ticket - </a>
我使用XSLT解析器转换后端返回的XML数据。解析器不会抛出任何错误,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       

这个问题源于这样一个事实:从IE10开始,Microsoft的新XMLHTTPRequest在原始XML没有cr\lf时,在responseXML体中添加任意cr\lf\r\n。这在IE11中刚刚开始发生,因为当检查window.ActiveXObject时,IE11似乎不再返回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转换的问题。

这个问题源于这样一个事实:自IE10起,Microsoft的新XMLHTTPRequest在原始XML没有cr\lf时,在responseXML正文中添加了任意cr\lf\r\n。这在IE11中刚刚开始发生,因为当检查window.ActiveXObject时,IE11似乎不再返回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转换带来问题。

Read

在发送请求之前,请尝试使用responseText或将responseType设置为“msxml文档”。

Read

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);

在发送请求之前,请尝试使用responseText或将responseType设置为“msxml document”。

要更新此内容,我可以确定IE11和XSLT转换正在将任意换行放入数据&XA;这导致了这个错误。现在,如何修复它?为了更新它,我能够确定IE11和XSLT转换正在将任意换行放入数据&XA;这导致了这个错误。现在,如何修复它?是的,那些也是。responseText中还有cr/lf。作为XML或HTML的msxml文档响应类型没有更改任何内容。@user3063475是否也可以尝试添加xhttp.responseXML.preserveWhiteSpace=true;在调用.send方法之前?是的,也这样做了,但没有任何效果。Gaby,我们重新检查了您提到的URL,设置为msxml文档的responseType确实解决了问题,但实际上返回了responseXML,就像使用msxml格式一样。使用旧的msxml activex对象也可以创建wokrs,这本质上是一样的。我仍然需要了解如何使用xslt正确转换新的responseXML。谢谢你的帮助是的,我也这么做了。responseText中还有cr/lf。作为XML或HTML的msxml文档响应类型没有更改任何内容。@user3063475是否也可以尝试添加xhttp.responseXML.preserveWhiteSpace=true;在调用.send方法之前?是的,也这样做了,但没有任何效果。Gaby,我们重新检查了您提到的URL,设置为msxml文档的responseType确实解决了问题,但实际上返回了responseXML,就像使用msxml格式一样。使用旧的msxml activex对象也可以创建wokrs,这本质上是一样的。我仍然需要了解如何使用xslt正确转换新的responseXML。谢谢你的帮助
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);