Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用xml.setNamespace()时不添加命名空间_Javascript_Xml_Namespaces_E4x - Fatal编程技术网

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)。