在服務器端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的方式,我想知道怎麼辦。
任何幫助,將不勝感激。
我們實際上刪除了E4X。您還應該考慮轉移到新的SpiderMonkey版本:https://developer.mozilla.org/en-US/docs/SpiderMonkey/24 – evilpie