无论的DOMParser或XMLSerializer的下降是在IE9我的命名空间声明(Either

2019-06-26 03:25发布

因此,我认为有可能比我在做什么反正清洁解决方案,但我不知道这是否是一个已知的问题,如果有什么明显我做错了,等等。

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

在IE9中,至少,当我得到的输出通过的DOMParser往返回来,XMLNS:XSL元素仍然存在,但XMLNS:FOO元素缺失。 这是预期的行为? 我在想什么?

Answer 1:

我做了一个试验的情况下http://home.arcor.de/martin.honnen/javascript/2012/test2012070901.html和我可以确认,在Windows 7与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中的错误,你可能要检查connect.microsoft.com这样的事情是否已经上报,如果没有备案。 有没有人在这里阅读使用IE 10? 什么IE 10说明了什么?

[编辑]对IE 10连接问题,可能与: https://connect.microsoft.com/IE/feedback/details/728093/xmlserializer-omits-xmlns-attributes 。



Answer 2:

我也遇到了这个问题。 在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 = '<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>"

我不知道这将有助于在原来的情况下,作为的DOMParser会做所有的元素创造的,但我决定的情况下,别人是有一个类似的问题张贴。



文章来源: Either DOMParser or XMLSerializer is dropping my namespace declaration in IE9