Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除xml节点-Xelement_C#_Xml_Linq To Xml - Fatal编程技术网

C# 删除xml节点-Xelement

C# 删除xml节点-Xelement,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我有一个xml文件,只需要从中删除特定的节点。节点名称将作为用户的输入提供。如何删除已向用户请求的特定节点 <Customers> <Customer> <id>michle</id> <address>newjersy</address> </Customer> <Customer> <id>ann</id

我有一个xml文件,只需要从中删除特定的节点。节点名称将作为用户的输入提供。如何删除已向用户请求的特定节点

<Customers>    
  <Customer>    
    <id>michle</id>
    <address>newjersy</address>    
  </Customer>    
  <Customer>    
    <id>ann</id>
    <address>canada</address>    
  </Customer>
</Customers>
客户将包含一个新节点

<Customer>    
  <id>ann</id>
  <address>canada</address>    
</Customer>

安
加拿大
doc.Element(“客户”).Elements(客户).ToList().Remove()


但这是行不通的。如何从xml中删除元素?

您的主要错误是,您创建的新节点没有附加到源文档,而不是从中检索现有节点

您可以使用MSDN上的文章作为操作XML数据的指南

例如,使用方法从树中删除一个节点或删除节点源集合中的每个节点:

doc.Descendants("Customer")
    .Where(x => x.Element("id").Value == id)
    .Remove();
但您还需要在提交更改后通过方法保存文档:

doc.Save();
汤姆

试试这个

private static void RemoveNode(string sID)
    {
        XDocument doc = XDocument.Load(@"D:\\Projects\\RemoveNode.xml");

        var v = from n in doc.Descendants("Customer")
                     where n.Element("id").Value == sID
                     select n;
        v.Remove();
        doc.Save(@"D:\\Projects\\RemoveNode.xml");
    }
当我使用调用它时,它删除了一个节点

RemoveNode("michle");

希望这有帮助

您可以根据
id

        xdoc.Descendants("Customer")
        .Where(x => (string)x.Element("id") == "michle")
        .Remove();

获取错误时,我尝试customer.remove()时,错误'System.Xml.Linq.XElement'不包含'RemoveChild'的定义,并且找不到接受'System.Xml.Linq.XElement'类型的第一个参数的扩展方法'RemoveChild',返回的错误是父级missing@TomCruise是的,因为您正在创建新节点,而不是从xml重新获取它。有关详细信息,请参阅最后一个链接。@TomCruise我用新的详细信息和参考资料更新了我的答案。否。我得到编译时错误。客户是一个似乎不允许的变量
        xdoc.Descendants("Customer")
        .Where(x => (string)x.Element("id") == "michle")
        .Remove();