C# 使用c从xml文件中删除元素#

C# 使用c从xml文件中删除元素#,c#,linq-to-xml,C#,Linq To Xml,最近我在这个帖子里有一个问题: 同样,我正在努力修改xml文件。 以下是xml: <ApplicationConfiguration> <ServerConfiguration> <SecurityPolicies> <ServerSecurityPolicy> <SecurityMode>None_1</SecurityMode> </ServerSecurityP

最近我在这个帖子里有一个问题:
同样,我正在努力修改xml文件。 以下是xml:

<ApplicationConfiguration>
  <ServerConfiguration>
    <SecurityPolicies>
      <ServerSecurityPolicy>
        <SecurityMode>None_1</SecurityMode>
      </ServerSecurityPolicy>
      <ServerSecurityPolicy>
        <SecurityMode>None_2</SecurityMode>
      </ServerSecurityPolicy>
    </SecurityPolicies>
  </ServerConfiguration>
</ApplicationConfiguration>
问题是:

  • 当foreach中的代码为
    elem.Remove()
    时,它返回一个错误,如:“对象引用未设置为对象的实例”
  • 当foreach内部的代码为
    label1.Text=elem.Name.LocalName
    时,
    label1
    显示
    ServerSecurityPolicy
    。因此
    elem.Name.LocalName
    可以正常工作,但是
    elem.Remove()
    不能正常工作
  • 我尝试了
    elem.RemoveNodes()
    。基于void描述,我认为代码将删除所有子节点(SecurityMode节点),但它不起作用(没有错误,但无法删除任何内容)。与
    elem.RemoveAll()相同

    你能告诉我我做错了什么吗?多谢各位

    • 又是我。我已通过替换该行来解决此问题
      var this=root.substands()。其中(p=>p.Name.LocalName==“ServerSecurityPolicy”)

      var this=root.substands(“SecurityPolicies”)

      然后,又是我。我已通过替换该行来解决此问题
      var this=root.substands()。其中(p=>p.Name.LocalName==“ServerSecurityPolicy”)

      var this=root.substands(“SecurityPolicies”)
      然后
      RemoveAll()

      此代码将有助于获得预期的输出

      此代码将有助于获得预期的输出


      由于您不只是从正在循环的集合中删除项目,我不确定“使用for循环”是否有效。由于您不只是从正在循环的集合中删除项目,我不确定“使用for循环”是否有效。
      <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);
      
      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);
          }