2015-03-02 61 views
1

我的XML文件存在問題。從XML文件中刪除列入XmlNodeList的節點

<?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'是什麼,或者......) – 2015-03-02 14:12:43

+0

'xmlTag'的價值是什麼? – SwDevMan81 2015-03-02 14:23:28

+0

我剛更新了我的帖子,其中包含必要的信息,xmlTag是字符串「mailCC」 – 2015-03-02 14:30:45

回答

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中出現錯誤 - 元素列表已更改。枚舉操作無法繼續。 – 2015-03-02 14:39:23

+0

請嘗試其他版本 – 2015-03-02 14:41:49