2009-10-26 49 views
1

每當我調用xml.setNamespace(ns)時,元素的名稱空間設置爲ns,但ns也作爲另一個名稱空間添加,並帶有它自己的元素前綴。我想知道如何阻止後者發生(我可以修改XML.prototype.function::setNamespace),而不定義@xmlns,因爲我不能使用E4X語法。或者,不使用E4X @attribute語法的XML.prototype.function::setAttribute(當然除了定義它的一個用途function::)會更好。使用xml.setNamespace()時不添加名稱空間()

例子:

var xhtml = new Namespace("http://www.w3.org/1999/xhtml"), 
xml = <foo/>; 
xml.setNamespace(xhtml); 

// what I get: 
xml.toXMLString() === 
    <foo 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    xmlns="http://www.w3.org/1999/xhtml" 
    />.toXMLString(); 

// what I want: 
xml.toXMLString() === 
    <foo 
    xmlns="http://www.w3.org/1999/xhtml" 
    />.toXMLString(); 

回答

0

我含量與剛剛<xhtml:my-root xmlns:xhtml="...">...</xhtml:my-root>所以我只是要堅持使用一個名爲命名空間(new Namespace(name, nsURI))。

0

我不知道答案,但我通過犀牛1.7r2跑了你的代碼,它返回不同的結果。要麼這是依賴於實現的,要麼是我們的E4X實現中有一個是bug。不知道哪個。

對犀牛1.7r2

var xhtml = new Namespace("http://www.w3.org/1999/xhtml"), 
xml = <foo/>; 
xml.setNamespace(xhtml); 

js> xml.toXMLString() 
<e4x_0:foo xmlns:e4x_0="http://www.w3.org/1999/xhtml"/> 

看起來你已經運行到了古老的「命名空間前綴應該是微不足道的,但在現實世界中,他們實際上是顯著」的問題。 :(

+0

你的犀牛似乎是治療'setNamespace'爲'addNamespace',這ISN沒有給出命名空間名稱(只是一個uri)。 – 2009-10-27 23:10:12