我正在编写一个浏览器扩展程序,它将文档序列化为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?
答案 0 :(得分:-1)
我最近遇到了同样的问题。我不知道有什么方法可以阻止它,但是做一个字符串替换来剥离它应该是非常可靠的:
var cleanedXmlStr = xmlStr.replace(
/\sxmlns\:xml=['"]http\:\/\/www\.w3\.org\/XML\/1998\/namespace['"]/g, '');
另一种选择是使用像这样的第三方序列化器: