2014-01-28 38 views
1

在服務器端JavaScript實現的(SpiderMonkey的),我試圖複製XML的一大塊從web服務返回和刪除的命名空間屬性。刪除命名空間屬性從E4X複製的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變量調用命名空間()產生一個空字符串..但我不明白的是,爲什麼從custAddr複製的XML到newXml仍然有XMLNS在XML屬性:

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

我終於放棄了,只是用正則表達式做了。看起來好像所有的E4X實現都是古怪的。

+0

我們實際上刪除了E4X。您還應該考慮轉移到新的SpiderMonkey版本:https://developer.mozilla.org/en-US/docs/SpiderMonkey/24 – evilpie