【问题标题】:remove nodes listed into XmlNodeList from XML file从 XML 文件中删除列在 XmlNodeList 中的节点
【发布时间】:2015-03-02 14:11:07
【问题描述】:

我的 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);
}

你能帮帮我吗?

【问题讨论】:

  • 有什么理由要使用 XmlDocument 而不是 LINQ to XML?后者使这完全微不足道...(您不向我们展示xmlTag 是什么也无济于事...)
  • xmlTag的值是多少?
  • 我刚刚用必要的信息更新了我的帖子,xmlTag 是字符串“mailCC”

标签: c# xml xmlnodelist


【解决方案1】:

删除节点将更新集合,因此您不应使用foreach 循环。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 在 foreach 中出现错误 - 元素列表已更改。枚举操作无法继续。
    • 请尝试其他版本
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 2023-03-24
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多