IE:XMLSerializer通过添加“xmlns:xml”属性来序列化“xml:lang”属性

时间:2016-06-27 18:34:21

标签: xml internet-explorer xml-parsing microsoft-edge browser-extension

我正在编写一个浏览器扩展程序,它将文档序列化为XML并将其发送到后端(对我们来说是黑盒子)。

当序列化程序在标记上遇到“xml:lang”属性时,它会向该节点添加(仅在IE,Edge中)“xmlns:xml”命名空间定义。

导致后端的XML解析错误。

如何在不添加“xmlns:xml”属性的情况下序列化?

// We create DOM node by parsing it from string
// Then we serialize it again
var content = "'<span id="el" xml:lang="ar" lang="ar">سالم</span>'";
var el = new DOMParser().parseFromString(content, 'application/xml');

var serialized = new XMLSerializer().serializeToString(el);
console.log(serialized);

// <span id="el" lang="ar" xml:lang="ar" xmlns:xml="http://www.w3.org/XML/1998/namespace">سالم</span>
// Serializing parsed node: attribute 'xmlns:xml' is added, how do I get rid of that?

1 个答案:

答案 0 :(得分:-1)

我最近遇到了同样的问题。我不知道有什么方法可以阻止它,但是做一个字符串替换来剥离它应该是非常可靠的:

var cleanedXmlStr = xmlStr.replace(
    /\sxmlns\:xml=['"]http\:\/\/www\.w3\.org\/XML\/1998\/namespace['"]/g, '');

另一种选择是使用像这样的第三方序列化器:

https://github.com/cburgmer/xmlserializer