Internet Explorer - IE:XMLSerializer 通过添加属性"xmlns:xml"序列化"xml:lang"属性



我正在编写一个浏览器扩展,它将文档序列化为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?

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

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

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

https://github.com/cburgmer/xmlserializer

最新更新