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 处理器会区别对待这两种形式。你也不用在意。
我用下面的代码生成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 处理器会区别对待这两种形式。你也不用在意。