Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# 根据子条件删除父节点_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# 根据子条件删除父节点

C# 根据子条件删除父节点,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,在这里,我需要根据某些条件删除xml节点的帮助 这是我的xml 请在这里推荐我 如果我理解正确: string first = "John"; string last = "D"; XDocument xd = XDocument.Parse(xml); xd.Root.Element("product").Elements("auto").ToList() .ForEach(x=> { var

在这里,我需要根据某些条件删除xml节点的帮助

这是我的xml

请在这里推荐我


如果我理解正确:

    string first = "John";
    string last = "D";
    XDocument xd = XDocument.Parse(xml);
    xd.Root.Element("product").Elements("auto").ToList()
        .ForEach(x=>
            {
            var name = x.Descendants("name").First();
            if (name.Element("first").Value != first
                && name.Element("last").Value != last)
                x.Remove();
            });
    Console.WriteLine(xd);
打印:

<result>
  <product>
    <auto>
      <report>
        <auto>
          <admin></admin>
          <report>
            <search>
              <subjects>
                <subject>
                  <name>
                    <first>John</first>
                    <last>D</last>
                  </name>
                </subject>
              </subjects>
            </search>
          </report>
        </auto>
      </report>
    </auto>
  </product>
</result>


Linq用于查询,而不是更新。您可以选择所有与您的条件不匹配的节点到一个新的XML结构中,也可以使用linq查找匹配的节点,循环遍历它们,并从原始结构中删除它们。无论哪种方式,您都需要展示您现在所拥有的,以了解您计划如何使用Linq(即使它不起作用)。我正在尝试先提取所需的xml,然后通过添加根元素来重新构造它。感谢您在这里的帮助。
  var query =
  from p in XDocument.Parse(myXml).Root.Elements   ("result/product/auto/report/auto/report/search/subjects/subject/name")
  where (
  from c in p.Elements("first")
  where c.Value == "John"
  select c
  ).Any()
  select p;
    string first = "John";
    string last = "D";
    XDocument xd = XDocument.Parse(xml);
    xd.Root.Element("product").Elements("auto").ToList()
        .ForEach(x=>
            {
            var name = x.Descendants("name").First();
            if (name.Element("first").Value != first
                && name.Element("last").Value != last)
                x.Remove();
            });
    Console.WriteLine(xd);
<result>
  <product>
    <auto>
      <report>
        <auto>
          <admin></admin>
          <report>
            <search>
              <subjects>
                <subject>
                  <name>
                    <first>John</first>
                    <last>D</last>
                  </name>
                </subject>
              </subjects>
            </search>
          </report>
        </auto>
      </report>
    </auto>
  </product>
</result>