2014-03-01 46 views
0

我想要做的是將DOM序列化爲XML。所以我創建一個新的文件如何防止在Firefox中產生空的命名空間?

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

我添加節點,屬性等。這工作正常。

問題是我在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. - 是的,我已經從這個帖子隨後建議 - >How to prevent the namespace generation?

UPDATE

Here是玩小提琴。

+0

如何創建附加到新文檔的元素?根據規範,您引用的問題中給出的答案是錯誤的,因爲document.createElement方法確實將名稱空間URI設置爲空的URI(http://www.w3.org/TR/DOM-Level- 3核/ core.html#ID-2141741547)。 –

+0

我按照該問題的答案中的建議創建元素...我還有其他選項嗎? –

+0

我有一個添加到小提琴玩的鏈接。 –

回答

3

您必須使用方法createElementNS而不是createElement,因爲後者會創建一個具有空名稱空間URI的元素。

Chrome錯誤地序列化了文檔(如果解析字符串,您將得到一個不同的文檔,命名空間URI錯誤),Firefox可以正確執行這項工作。其實a bug was filed和標記爲已解決,但問題似乎仍然存在。

因此,只需將doc.createElement(yourElementName)替換爲doc.createElementNS('http://AOR-AppML.org', yourElementName)即可。

+0

這似乎是在做伎倆......謝謝! –