2013-07-12 95 views
0

我的XML文件是這樣的:刪除特定的XML節點的Javascript

它含有不同的「對象」節點,並在不同的對象有不同的參數,一個被刪除的參數。

欲刪除包含刪除參數1.

這是刪除具有刪除= 1的參數節點的節點對象的代碼中的所有「對象」節點:

x=xmlDoc.documentElement; 
for(var count=0; count<5;count++){ 
    var y=x.getElementsByTagName("deleted")[count]; //Find that nodes arent 
    if(y.textContent == "1") { 
    var z=y.parentNode; //delete the node from the parent. 
    x.removeChild(z); 
    Xml2String1= new XMLSerializer().serializeToString(x); 
    } 
} 
+1

你試過了什麼?你卡在哪裏? – gdoron

+0

你的XML,JS代碼塊不顯示... – sonjz

+0

感謝審議, 我又試了一次,我的方法工作,這是一個刪除具有刪除= 1的參數節點的節點對象的代碼: 「 X = xmlDoc.documentElement; 爲(VAR X1 = 0; X 1 <5; X 1 ++){ VAR Y = x.getElementsByTagName( 「刪除」)[X1]; // 查找節點的父 如果(y.textContent == 「1」) { 變種Z = y.parentNode; //從父 x.removeChild(z)的刪除的節點; Xml2String1 = new XMLSerializer()。serializeToString(x); 「 謝謝 – Zeeshan

回答

0

你的循環是不正確的:

for(var x1=0; x1<5;x1++){ 
    var y=x.getElementsByTagName("deleted")[x1]; 

你的循環5次迭代運行,而無需爲<deleted>元素的數量方面被發現。每次通過循環時,都會再次搜索並獲取剩餘的<deleted>元素的新NodeList/HTMLCollection,但無論如何,循環計數器都會遞增。

試試這個:

var deletedNodesList = x.getElementsByTagName("deleted"); 
var nodesToDelete = []; 
for (var index = 0; index < deletedNodes.length ; index += 1) 
    { 
    var node = deletedNodes[index]; 
    if (node.textContent == "1") 
     { 
     nodesToDelete.push(node.parentNode); //delete the node from the parent 
     } 
    } 

nodesToDelete.forEach(function() { x.removeChild(this); }); 

需要注意的是,每對MDN的文檔,節點列表是現場收集,所以當你在處理它不修改它。附件1:


PS。 我第二次raam86的建議使用理智(有意義)的變量名稱。有意義的變量名稱使代碼更容易理解,這使得編寫正確的代碼變得更加容易,並解決了代碼不正確的問題。

+0

循環設置爲5用於測試目的。 – Zeeshan