【问题标题】:IE: XMLSerializer serializes "xml:lang" attribute with adding "xmlns:xml" attributeIE:XMLSerializer 通过添加“xmlns:xml”属性来序列化“xml:lang”属性
【发布时间】:2016-10-29 21:03:23
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    https://github.com/cburgmer/xmlserializer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 2016-03-05
      • 2013-01-28
      • 2011-05-18
      • 2010-09-16
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多