Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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/0/xml/13.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
Javascript DOMParser或XMLSerializer正在IE9中删除我的命名空间声明_Javascript_Xml_Xslt_Internet Explorer 9_Xml Namespaces - Fatal编程技术网

Javascript DOMParser或XMLSerializer正在IE9中删除我的命名空间声明

Javascript DOMParser或XMLSerializer正在IE9中删除我的命名空间声明,javascript,xml,xslt,internet-explorer-9,xml-namespaces,Javascript,Xml,Xslt,Internet Explorer 9,Xml Namespaces,所以我认为可能有比我现在做的更干净的解决方案,但我想知道这是否是一个已知的问题,是否有明显的错误,等等 出于不值得描述的原因,我有一些Javascript代码,在一个可能的路径中,使用DOMParser从字符串加载XML,然后使用XMLSerializer将其序列化回字符串。XML文档是一个XSL样式表。在主xsl:stylesheet标记中有两个xmlns元素:一个声明xsl名称空间,另一个声明我使用的自定义名称空间。(称之为“foo”) 至少在IE9中,当我通过DOMParser从往返中获得

所以我认为可能有比我现在做的更干净的解决方案,但我想知道这是否是一个已知的问题,是否有明显的错误,等等

出于不值得描述的原因,我有一些Javascript代码,在一个可能的路径中,使用DOMParser从字符串加载XML,然后使用XMLSerializer将其序列化回字符串。XML文档是一个XSL样式表。在主xsl:stylesheet标记中有两个xmlns元素:一个声明xsl名称空间,另一个声明我使用的自定义名称空间。(称之为“foo”)

至少在IE9中,当我通过DOMParser从往返中获得输出时,xmlns:xsl元素仍然存在,但是xmlns:foo元素丢失了。这是预期的行为吗?我遗漏了什么?

我做了一个测试用例,我可以确认Windows7上IE 9的输出是正确的

Input
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:foo="http://example.com/foo">
<xsl:template match="foo:bar">Test</xsl:template>
</xsl:stylesheet>
Output
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="foo:bar">Test</xsl:template>
</xsl:stylesheet>
输入
试验
输出
试验
因此,名称空间声明被删除。我认为IE 9中有一个bug,您可能想检查连接。MySuftcom是否已经报告过类似的情况,如果没有文件的话。这里有人在用IE 10阅读吗?IE 10展示了什么


[编辑]IE 10上存在连接问题,可能与以下问题有关:。

我也遇到了此问题。在IE11中,我有一些javascript序列化XML,名称空间URI被删除

作为一种解决方法,我在创建适当的子节点时使用了
createElementNS
方法

比如说,不是

var r = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:n0="web5540"></soap:Envelope>';
var m = new DOMParser().parseFromString(r, "text/xml");
var n = m.createElement('n0:GetSales');
var p = m.firstChild;
p.appendChild(n);
var k = new XMLSerializer().serializeToString(m);
// In IE, k = "<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ><n0:GetSales /></soap:Envelope>"
var r='';
var m=new DOMParser().parseFromString(r,“text/xml”);
var n=m.createElement('n0:GetSales');
var p=m.firstChild;
p、 儿童(n);
var k=新的XMLSerializer().serializeToString(m);
//在IE中,k=“”
。。。我最终做了这个

var r = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"></soap:Envelope>';
var m = new DOMParser().parseFromString(r, "text/xml");
var n = m.createElementNS('web5540', 'n0:GetSales');
var p = m.firstChild;
p.appendChild(n);
var k = new XMLSerializer().serializeToString(m);
// In IE, k = "<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><n0:GetSales xmlns:n0="web5540" /></soap:Envelope>"
var r='';
var m=new DOMParser().parseFromString(r,“text/xml”);
var n=m.createElements('web5540','n0:GetSales');
var p=m.firstChild;
p、 儿童(n);
var k=新的XMLSerializer().serializeToString(m);
//在IE中,k=“”

我不确定这在最初的情况下是否有帮助,因为DOMParser将完成所有元素的创建,但我决定在其他人遇到类似问题时发布。

考虑发布一个最小但完整的测试用例,供其他人检查和复制,然后我们可以告诉你更多。如果你真的在文件中的某个元素上使用前缀呢?连接问题表明,属性或元素名称中使用的前缀会导致发出名称空间声明,但如果属性值(如
xsl:template match
)包含限定名称,则这不会有帮助。好的,很抱歉,我没有超出该连接问题的登录屏幕。另外,这是有道理的,对吗?无论解析它的是什么,都必须知道
match
属性在XSLT方言中意味着某种特定的东西。我在任何XML规范中都找不到任何涉及未使用名称空间的内容。