Подтвердить что ты не робот

Как удалить XmlNode из XmlNodeList

Мне нужно удалить XmlNode на основе условия. Как это сделать?

foreach (XmlNode drawNode in nodeList)
{
       //Based on a condition
       drawNode.RemoveAll();  //need to remove the entire node                      

}
4b9b3361

Ответ 1

Это должно сделать трюк для вас:

for (int i = nodeList.Count - 1; i >= 0; i--)
{
    nodeList[i].ParentNode.RemoveChild(nodeList[i]);
}

Если вы выполняете цикл с использованием регулярного цикла for и цикл за ним "назад", вы можете удалять элементы по ходу.

Обновление: вот полный пример, включая загрузку xml файла, поиск узлов, удаление их и сохранение файла:

XmlDocument doc = new XmlDocument();
doc.Load(fileName);
XmlNodeList nodes = doc.SelectNodes("some-xpath-query");
for (int i = nodes.Count - 1; i >= 0; i--)
{
    nodes[i].ParentNode.RemoveChild(nodes[i]);
}
doc.Save(fileName);

Ответ 2

Если вы пытаетесь удалить node из XML DOM, это неверный путь. Поскольку XMLNodeList - это всего лишь список узлов. Скорее вы хотите удалить node из родительского node. Вот так:

XmlNode parentNode = // some value
XmlNode drawNode = // some value
parentNode.ParentNode.RemoveChild(drawNode);

Ответ 3

Вы не можете легко использовать итераторы (foreach-statement) для удаления ваших узлов. Как я вижу, вы можете сделать следующее:

1) В вашем цикле foreach сохраните список всех элементов, которые необходимо удалить. Затем вы просматриваете только те элементы и удаляете их.

2) Используйте обычный цикл for и отслеживайте, какой следующий элемент следует посетить после того, как вы удалили один элемент.

Edit: При использовании for-loop делайте это так, как предлагает Fredrik, зацикливая назад.

Ответ 4

Не следующее немного проще:

XmlDocument doc = new XmlDocument(); 
doc.Load(fileName); 
XmlNodeList nodes = doc.SelectNodes("some-xpath-query"); 
while (nodes.FirstChild != null) {     
    nodes.RemoveChild(nodes.FirstChild); 
} 
doc.Save(fileName); 

Ответ 5

    XmlNodeList xnodeContact = xmldocContact.GetElementsByTagName("contact");
          foreach (ListViewItem item in listViewContacts.Items)
            {
                if (item.Checked)
                {
                    if (item.Index >= 0)
                        xnodeContact[0].ParentNode.RemoveChild(xnodeContact[0]);
                        listViewContacts.Items.Remove(item);
                    }
                }
            }
            xmldocContact.Save(appdataPath + "\\WhatAppcontactList.xml");
            Invalidate();