从E4X复制的XML中删除命名空间属性

时间:2014-01-28 22:01:11

标签: javascript xml e4x spidermonkey

在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删除它的方式,我想知道如何。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我终于放弃了,只是用正则表达式做了。似乎所有E4X实现都充其量只是古怪。