2015-03-02 1 views
1

У меня проблема с моим XML-файлом.удалить узлы, перечисленные в XmlNodeList из файла XML

<?xml version="1.0" encoding="UTF-8"?> 
    <config> 
    <settings> 
    <excelFilePath>C:\Temp\</excelFilePath> 
    <mailHost>smtp</mailHost> 
    <mailPort>25</mailPort> 
    <mailFrom>[email protected]</mailFrom> 
    <keepInCopy> 
     <mailCC>[email protected]</mailCC> 
     <mailCC>[email protected]</mailCC> 
     <mailCC>[email protected]</mailCC> 
    </keepInCopy> 
    <mailSubject>My Mail subject</mailSubject> 
    <mailBodyPath>Templates\Template1.htm</mailBodyPath> 
    </settings> 
</config> 

На практике мне просто нужно удалить все теги «mailCC». Я сейчас пытаюсь этот код C#, но ничего не происходит:

XmlDocument xml = new XmlDocument(); 
xml.Load(FilePath); 

XmlNodeList xnList = xml.GetElementsByTagName("mailCC"); 
foreach (XmlNode xn in xnList) 
{ 
    xn.RemoveChild(xn.FirstChild); 
    xml.Save(FilePath); 
} 

Не могли бы вы мне помочь, пожалуйста?

+2

Любая причина, по которой вы хотите использовать XmlDocument, а не LINQ to XML? Последнее делает это совершенно тривиальным ... (Это не помогает, чтобы вы не показывали нам, что такое 'xmlTag', либо ...) –

+0

Какова ценность' xmlTag'? – SwDevMan81

+0

Я только что обновил сообщение с необходимой информацией, xmlTag - это строка «mailCC» –

ответ

1

Удаление узла будет обновлять коллекцию, так что вы не должны использовать foreach цикл.

XmlNodeList xnList = xml.GetElementsByTagName("mailCC"); 

while (xnList.Count > 0) { 
    xnList[0].ParentNode.RemoveChild(xnList[0]); 
} 
1

Использование XmlDocument Узел удален из его родителя. Но вы также можете сделать:

var xn = xml.SelectSingleNode("/config/settings/keepInCopy"); 
if (xn != null) 
{ 
    xn.RemoveAll(); // Remove all "mailCC" elements, but keep "keepInCopy" node **OR** 
    xn.ParentNode.RemoveChild(xn); // Remove "keepInCopy" element and all children 
} 
+0

получила ошибку в foreach - список элементов изменился. Операция перечисления не продолжилась. –

+0

Пожалуйста, попробуйте другую версию –