【问题标题】:Remove children nodes in XML using Linq使用 Linq 删除 XML 中的子节点
【发布时间】:2020-03-27 08:26:14
【问题描述】:

我有一个 XML 文件,其中包含嵌套在父节点中的父节点和子节点列表,当满足特定条件时,我需要删除子节点。 例如:删除 id = 1 的所有联系人节点。如何使用 linq 和 xml 实现此目的。这是我的 XML 结构

<Events>
 <Event>
    <id>1</id>
    <title>AA</title>
    <start>2019-12-01T14:13:58.863</start>
    <end>2019-12-01T15:13:58.787</end>
    <contacts>

      <contact>
        <id>1</id>
        <name>ABC</name>
      </contact>

      <contact>
        <id>2</id>
        <name>ABCD</name>
      </contact>

      <contact>
        <id>3</id>
        <name>ABCDE</name>
      </contact>

    </contacts>
 </Event>

<Event>
    <id>2</id>
    <title>BB</title>
    <start>2019-12-01T14:13:58.863</start>
    <end>2019-12-01T15:13:58.787</end>
    <contacts>

      <contact>
        <id>1</id>
        <name>ABC</name>
      </contact>

      <contact>
        <id>2</id>
        <name>ABCD</name>
      </contact>

      <contact>
        <id>3</id>
        <name>ABCDE</name>
      </contact>

    </contacts>
 </Event>
</Events>

【问题讨论】:

  • 您已经在 linq 中尝试过什么?你得到什么错误?
  • 提示:从查找所有要删除的元素的查询开始。从那里,只需致电Remove

标签: c# xml linq linq-to-xml


【解决方案1】:

您可以使用此查询获取 XML 节点

var query = xmlDoc.Descendants("contact").Where(e => e.Element("id").Value.Equals(id)).ToList();

然后运行

query.Remove()

删除返回的元素。

【讨论】:

    【解决方案2】:

    正如 Jon Skeet 指出的那样,没有必要做任何深奥的事情。这是一个完整的例子。纯 LINQ to XML

    c#, LINQ to XML

    void Main()
    {
        const string inputXML = @"e:\Temp\MikeOconner.xml";
        const string outputXML = @"e:\Temp\MikeOconner_output.xml";
    
        XDocument xml = XDocument.Load(inputXML);
    
        xml.Root.DescendantsAndSelf("contact")
            .Where(r => (string)r.Element("id").Value == "1")
            .Remove();
        xml.Save(outputXML);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多