Javascript XML 序列化(IE问题)

Javascript XML serialization (IE issue)

我用下面的代码生成XML,见codepen

var doc = document.implementation.createDocument ('http://www.w3.org/1999/xhtml', 'root', null);

var somenamespace = "http://somenamespace.com/schema";
doc.documentElement.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:' + "pref", somenamespace);

var el1 = doc.createElementNS(doc.documentElement.namespaceURI, "el1");
doc.documentElement.appendChild(el1);

var el2 = doc.createElementNS(doc.documentElement.namespaceURI, "el2");
el1.appendChild(el2);

el2.setAttributeNS(somenamespace, "pref" + ":" + "foo", "bar");

var serializer = new XMLSerializer();
var raw = serializer.serializeToString(doc);
document.body.innerText = raw;

它在 Chrome、Firefox、Safari 中按预期工作,但 IE 将我的 xmlns:prefix 放在我设置的位置并写入其他 XML 节点。

预计:

<root
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:pref="http://somenamespace.com/schema">
    <el1>
        <el2 pref:foo="bar"></el2>
    </el1>
</root>

IE:

<root
 xmlns="http://www.w3.org/1999/xhtml">
 <el1>
  <el2
   xmlns:pref="http://somenamespace.com/schema" pref:foo="bar">
  </el2>
 </el1>
</root>

我该怎么做才能解决问题并让 IE 在根元素(我设置的位置)中写入 xmlns

What can I do to workaround and make IE write xmlns in the root element (where I set it)?

没有。

您的预期和实际 XML 完全相同。没有合规的 XML 处理器会区别对待这两种形式。你也不用在意。