每当我调用xml.setNamespace(ns)
时,元素的命名空间都设置为ns
,但ns
也会被添加为另一个命名空间,并带有它自己的元素前缀。我想知道如何阻止后者发生(我可以修改XML.prototype.function::setNamespace
)而不定义@xmlns
因为我不能使用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();
答案 0 :(得分:0)
我不知道答案,但是我通过Rhino 1.7r2运行了你的代码,它返回了不同的结果。这是依赖于实现的,或者我们的一个E4X实现是错误的。不知道哪个。
on 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"/>
看起来你已经遇到了古老的“命名空间前缀应该是微不足道的,但在现实世界中它们实际上是重要的”问题。 :(
答案 1 :(得分:0)
我很满意只是获得<xhtml:my-root xmlns:xhtml="...">...</xhtml:my-root>
所以我只会坚持使用命名空间(new Namespace(name, nsURI)
)。