Javascript 使用xml.setNamespace()时不添加命名空间
每当我调用Javascript 使用xml.setNamespace()时不添加命名空间,javascript,xml,namespaces,e4x,Javascript,Xml,Namespaces,E4x,每当我调用xml.setNamespace(ns)时,元素的名称空间被设置为ns,但是ns也被添加为另一个名称空间,并带有它自己的前缀。我想知道如何在不定义@xmlns的情况下阻止后者的发生(我可以修改XML.prototype.function::setNamespace),因为我不能使用E4X语法。或者,一个不使用E4X@attribute语法的XML.prototype.function::setAttribute(当然除了使用function::定义它)会更好 例如: var xhtml
xml.setNamespace(ns)
时,元素的名称空间被设置为ns
,但是ns
也被添加为另一个名称空间,并带有它自己的前缀。我想知道如何在不定义@xmlns
的情况下阻止后者的发生(我可以修改XML.prototype.function::setNamespace
),因为我不能使用E4X语法。或者,一个不使用E4X@attribute语法的XML.prototype.function::setAttribute
(当然除了使用function::
定义它)会更好
例如:
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();
var xhtml=新名称空间(“http://www.w3.org/1999/xhtml"),
xml=;
setNamespace(xhtml);
//我得到的是:
xml.toXMLString()===
.toXMLString();
//我想要的是:
xml.toXMLString()===
.toXMLString();
我不知道答案,但我通过Rhino 1.7r2运行了您的代码,它返回了不同的结果。要么这依赖于实现,要么我们的一个E4X实现存在缺陷。不知道是哪个
在Rhino 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"/>
var xhtml=新名称空间(“http://www.w3.org/1999/xhtml"),
xml=;
setNamespace(xhtml);
js>xml.toXMLString()
看起来您遇到了一个由来已久的“名称空间前缀本应无关紧要,但在现实世界中它们实际上很重要”问题:(我满足于只获得
..
,因此我将坚持使用命名名称空间(新名称空间(name,nsURI)
)。您的Rhino似乎将设置名称空间
视为添加名称空间
,而没有给它命名名称空间(只是一个uri)。