簡體   English   中英

從XML文件中刪除XmlNodeList中列出的節點

[英]remove nodes listed into XmlNodeList from XML file

我的XML文件有問題。

 <?xml version="1.0" encoding="UTF-8"?>
   <config>
    <settings>
     <excelFilePath>C:\Temp\</excelFilePath>
     <mailHost>smtp</mailHost>
     <mailPort>25</mailPort>
     <mailFrom>me@test.com</mailFrom>
     <keepInCopy>
         <mailCC>email1@test.com</mailCC>
         <mailCC>email2@test.com</mailCC>
         <mailCC>email3@test.com</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);
}

請問你能幫幫我嗎?

刪除節點將更新集合,因此您不應使用foreach循環。

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

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

使用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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM