Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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# Linq to XML选择每个具有特定属性的子代的子代_C#_Xml_Linq - Fatal编程技术网

C# Linq to XML选择每个具有特定属性的子代的子代

C# Linq to XML选择每个具有特定属性的子代的子代,c#,xml,linq,C#,Xml,Linq,我已经找到了许多关于获取具有特定属性的子体的文章,但是我似乎找不到任何关于使用LINQ to XML选择具有不同属性的多个子体的文章。因此,从下面的示例中,我需要选择所有的孙子,其中父名=Ken,子名=Lorna。我可能需要最多4个和子句,因为我的真正XML比下面的示例更深 我可以选择Ken的所有子项进行编码,但找不到比这更深入的示例 非常感谢您的帮助 <?xml version="1.0" encoding="UTF-8"?> <FamilyTree> <Pa

我已经找到了许多关于获取具有特定属性的子体的文章,但是我似乎找不到任何关于使用LINQ to XML选择具有不同属性的多个子体的文章。因此,从下面的示例中,我需要选择所有的孙子,其中
父名=Ken,子名=Lorna
。我可能需要最多4个
子句,因为我的真正XML比下面的示例更深

我可以选择Ken的所有子项进行编码,但找不到比这更深入的示例

非常感谢您的帮助

<?xml version="1.0" encoding="UTF-8"?>
<FamilyTree>
  <Parent name="Ken">
    <Child name="Lorna">
      <Grandchild name="Andrew"/>
      <Grandchild name="Brian"/>
    </Child>
    <Child name="Mike">
      <Grandchild name="Ann"/>
      <Grandchild name="Beth"/>
    </Child>
  </Parent>
  <Parent name="Norma">
    <Child name="Owen">
      <Grandchild name="Charles"/>
    </Child>
    <Child name="Peter">
      <Grandchild name="Charlotte"/>
    </Child>
  </Parent>
  <Parent name="Quinn">
    <Child name="Robert">
      <Grandchild name="Debbie"/>
      <Grandchild name="Eric"/>
    </Child>
    <Child name="Susan">
      <Grandchild name="Frank"/>
    </Child>
  </Parent>
</FamilyTree>

这里有多个选项,但我建议最简单的方法就是检查每个孙子:

var grandchildren = doc
    .Descendants("Grandchild")
    .Where(x => (string) x.Parent.Parent.Attribute("name") == "Ken" &&
                (string) x.Parent.Attribute("name") == "Lorna");
或者您可以找到所有相关的
子元素
元素,然后检索它们的子元素:

var grandchildren = doc
    .Descendants("Child")
    .Where(x => (string) x.Parent.Attribute("name") == "Ken" &&
                (string) x.Attribute("name") == "Lorna")
    .Elements("Grandchild");