【问题标题】:Remove Element from xml file with c#使用c#从xml文件中删除元素
【发布时间】:2020-08-05 04:51:51
【问题描述】:

最近我在这个帖子中有一个问题:Delete Attribute of Xml node c#
同样,我正在努力修改 xml 文件。 这是xml:

<ApplicationConfiguration>
  <ServerConfiguration>
    <SecurityPolicies>
      <ServerSecurityPolicy>
        <SecurityMode>None_1</SecurityMode>
      </ServerSecurityPolicy>
      <ServerSecurityPolicy>
        <SecurityMode>None_2</SecurityMode>
      </ServerSecurityPolicy>
    </SecurityPolicies>
  </ServerConfiguration>
</ApplicationConfiguration>

我想要的是删除所有 ServerSecurityPolicy 节点,所以结果将是:

<ApplicationConfiguration>
  <ServerConfiguration>
    <SecurityPolicies>
    </SecurityPolicies>
  </ServerConfiguration>
</ApplicationConfiguration>

然后我使用这个代码:

            string docaddress = "D:\\abc.xml";
            XDocument doc = XDocument.Load(docaddress);
            var root = doc.Root;
            var these = root.Descendants().Where(p => p.Name.LocalName == "ServerSecurityPolicy");        
            foreach (var elem in these)
            {
                elem.Remove();
            }
            doc.Save(docaddress);

问题来了:

  • 当 foreach 中的代码为 elem.Remove() 时,它会返回类似的错误:'Object reference not set to an instance of an object'
  • 当foreach 中的代码为label1.Text=elem.Name.LocalName 时,label1 显示ServerSecurityPolicy。这样elem.Name.LocalName 可以正常工作,而elem.Remove() 不行?
  • 我试过elem.RemoveNodes()。根据 void 描述,我认为代码将删除所有子节点(SecurityMode 节点),但它不起作用(没有错误,但不能删除任何东西)。与elem.RemoveAll() 相同。
    如果我做错了什么,你能告诉我吗?谢谢

【问题讨论】:

  • 由于您不是简单地从您循环的集合中删除项目,我不确定“使用 for 循环”是否有效。

标签: c# linq-to-xml


【解决方案1】:

又是我。我已经通过替换线解决了它
var these = root.Descendants().Where(p =&gt; p.Name.LocalName == "ServerSecurityPolicy");

var these = root.Descendants("SecurityPolicies");
然后RemoveAll()

【讨论】:

    【解决方案2】:

    此代码将帮助您获得预期的输出

    public static void Main(string[] args)
        {
            string xmlpath = "sample.xml";
    
            XDocument xdoc = XDocument.Load(xmlpath);
    
            var list = xdoc.Elements().Descendants().ToList();
    
            foreach (var item in list)
            {
                item.Descendants("ServerSecurityPolicy").Remove();
            }
    
            xdoc.Save(xmlpath);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多