Удалить конкретный узел 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.