删除xml节点-Xelement

时间:2017-02-13 04:16:14

标签: c# xml linq-to-xml

我有一个xml文件,只能从中删除特定节点。节点名称将作为用户的输入给出。如何删除用户请求的特定节点?

<Customers>    
  <Customer>    
    <id>michle</id>
    <address>newjersy</address>    
  </Customer>    
  <Customer>    
    <id>ann</id>
    <address>canada</address>    
  </Customer>
</Customers>

我试过了

var customer = new XElement("customer",
      from o in customers
      select 
          new XElement("id", id),
          new XElement("address", address)
        );

客户将包含一个新节点

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

doc.Element("customers").Elements(customer).ToList().Remove();

但这不起作用。如何从xml中删除元素?

3 个答案:

答案 0 :(得分:2)

汤姆,

试试这个......

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");

希望这会有所帮助。

答案 1 :(得分:1)

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

您可以在MSDN上使用文章"Removing Elements, Attributes, and Nodes from an XML Tree"作为操作XML数据的指南。

例如,使用XNode.Remove()方法从树中删除一个节点,或使用Extensions.Remove<T>(this IEnumerable<T> source) where T : XNode删除源节点集合中的每个节点:

doc.Descendants("Customer")
    .Where(x => x.Element("id").Value == id)
    .Remove();

但您还需要通过Save方法保存文档,然后提交更改:

doc.Save();

答案 2 :(得分:0)

您可以根据id

删除此方式
        xdoc.Descendants("Customer")
        .Where(x => (string)x.Element("id") == "michle")
        .Remove();