如何防止Firefox中的空名称空间生成?

时间:2014-03-01 11:48:39

标签: javascript xml firefox dom xml-serialization

我想要做的是将DOM序列化为XML。所以我创建了一个新文档

var doc = document.implementation.createDocument ('http://AOR-AppML.org', 'Application', null);

我添加节点,属性等。这很好。

问题是我在Google Chrome和Mozilla Firefox中与XMLSerializer有不同的行为。

Chrome控制台输出:

<Application xmlns="http://AOR-AppML.org" name="SoRiN"><ObjectType name="ObjectTypeName"/><Enumeration name="EnumerationName"/></Application>

Firefox控制台输出(注意 xmlns =“”):

<Application xmlns="http://AOR-AppML.org" name="SoRiN"><ObjectType xmlns="" name="ObjectTypeName"/><Enumeration xmlns="" name="EnumerationName"/></Application>

我不想生成那个空命名空间。我读过这个命名空间表明相应的元素没有默认命名空间(http://www.w3.org/TR/xml-names/#defaulting),但实际上我希望它们与Application位于同一个命名空间。

有没有办法阻止Firefox中的命名空间生成?

P.S。 - 是的,我已经按照这篇文章的建议 - &gt; How to prevent the namespace generation?

更新

Here是一个小提琴。

1 个答案:

答案 0 :(得分:3)

您必须使用方法createElementNS而不是createElement,因为后者会创建一个空命名空间URI的元素。

Chrome错误地序列化了文档(如果你解析字符串,你会得到一个不同的文档,命名空间URI错误),Firefox可以正常工作。实际上a bug was filed并标记为已解决,但问题似乎仍然存在。

因此,只需将doc.createElement(yourElementName)替换为doc.createElementNS('http://AOR-AppML.org', yourElementName)