在javascript(Spidermonkey)的服务器端实现中,我正在尝试复制从webservice返回的一大块XML并删除命名空间属性。
我只是喜欢复制的XML来删除命名空间引用以保持新的xml结构更清晰,因为我的新XML更简单并且不需要命名空间。
我已经尝试过setNamespace(),setNamespace(new Namespace()),removeNamespace()等等 - 但是我不能让xmlns属性出现在复制的XML中。
以下是一个例子:
var ns = new Namespace('', 'urn://foo.com/bar');
var xml = <root>
<addrInfo>
<custAddr xmlns="urn://foo.com/bar">
<addr>123 Main</addr>
<city>My Town</city>
<stateProv>XX</stateProv>
<postalCode>12345</postalCode>
</custAddr>
</addrInfo>
</root>;
xml.addrInfo.ns::custAddr.setNamespace(new Namespace());
var newXml = xml.addrInfo.custAddr;
console.log('namespace: ' + newXml.namespace());
console.log(newXml);
如果您注意到,一旦我调用了setNamespace(),我就可以引用没有命名空间引用的custAddr节点..所以它就像被移除一样..甚至在newXml变量上调用namespace()会产生一个空字符串..但我不明白为什么从custAddr复制到newXml的XML仍然在xml中有xmlns属性:
namespace:
<custAddr xmlns="urn://foo.com/bar">
<addr>123 Main</addr>
<city>My Town</city>
<stateProv>XX</stateProv>
<postalCode>12345</postalCode>
</custAddr>
我只想要一个没有xmlns属性的干净的custAddr元素。
我意识到我可以做一些字符串操作/正则表达式/等并以这种方式摆脱属性,但是如果有一种正确的e4x删除它的方式,我想知道如何。
任何帮助都将不胜感激。
答案 0 :(得分:0)
我终于放弃了,只是用正则表达式做了。似乎所有E4X实现都充其量只是古怪。