【问题标题】:How to prevent empty namespace generation in Firefox?如何防止在 Firefox 中生成空的命名空间?
【发布时间】:2014-03-01 11:48:38
【问题描述】:

我想要做的是将 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 中生成命名空间?

附: - 是的,我已经听从了这篇文章的建议 -> How to prevent the namespace generation?

更新

Here 是个小玩意儿。

【问题讨论】:

  • 如何创建附加到新文档的元素?根据规范,您引用的问题中给出的答案是错误的,因为方法document.createElement 确实将命名空间URI 设置为空的(w3.org/TR/DOM-Level-3-Core/core.html#ID-2141741547)。
  • 我按照该问题的答案中的建议创建元素......我还有哪些其他选择?
  • 我添加了一个指向小提琴的链接。

标签: javascript xml firefox dom xml-serialization


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 2021-11-20
    • 2020-08-28
    • 2022-08-22
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2018-04-24
    • 2014-12-04
    相关资源
    最近更新 更多