Удалить конкретный узел XML Javascript

Мой xml файл похож:

он содержит разные "объекты", а в разных объектах есть разные параметры, один из которых удаляется.

Я хочу удалить все "объекты", которые содержат удаленный параметр 1.

Это код, который удаляет объект узла, у которого есть узел параметра deleted = 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 ответ

Ваша петля неверна:

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

Ваш цикл работает для 5 итераций без учета количества элементов . Каждый раз через цикл вы снова выполняете поиск и получаете новый 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 NodeList представляет собой живую коллекцию, поэтому не изменяйте ее, пока вы ее обрабатываете.

PS. Я рекомендую второй raam86 использовать здравые (значащие) имена переменных. Значимые имена переменных облегчают понимание кода, что упрощает запись правильного кода и устранение проблем с неправильным кодом.

licensed under cc by-sa 3.0 with attribution.