c# - Linq 到 XML : Get all nodes that contain certain children

标签 c# xml linq linq-to-xml

我有以下 XML 结构:

<Capabilities>
    <Capability ID="1" Name="Capability # 1">
        <Relations>
            <Relation RelatedTo="2" RelationType="Child"/>
            <Relation RelatedTo="3" RelationType="Child"/>
            <Relation RelatedTo="4" RelationType="Child"/>
            <Relation RelatedTo="5" RelationType="Child"/>
        </Relations>
    </Capability>
    <Capability ID="3" Name="Capability # 3">
        <Relations>
            <Relation RelatedTo="1" RelationType="Dependant" />
        </Relations>
    </Capability>
    <Capability ID="2" Name="Capability # 2">
        <Relations>
            <Relation RelatedTo="6" RelationType="Child" />
            <Relation RelatedTo="5" RelationType="Child" />
        </Relations>
    </Capability>
</Capabilities>

我需要查询所有具有 Child 关系且相关属性值为 5 的功能。 到目前为止,我已尝试使用以下查询,但我得到了“空引用异常”的集合,并且我不知道如何执行此操作。

   var result = root.Elements("Capability")
                 .Where(c => c.Elements("Relations")
                            .Where(r => r.Attribute("RelatedTo").Value == "5"
                                && r.Attribute("").Value == Enum.GetName(typeof(RelationTypes), RelationTypes.Children)).Any());

关于我做错了什么或者查询它的正确方法有什么线索吗?

最佳答案

var capabilites = root.Descendants("Capability")
            .Where(c => c.Descendants("Relation")
                         .Any(r => (string)r.Attribute("RelatedTo") == "5"))
            .ToList();

关于c# - Linq 到 XML : Get all nodes that contain certain children,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378547/

相关文章:

c# - 一个属性的显示名称(标签)能否根据另一个属性的值而改变?

c# - 使用 async/await 时防止 winforms UI 阻塞

c# - "% Time in GC"性能计数器是什么意思

c# - XmlWriter 异步操作失败并显示 XmlWriterSettings.OutputMethod = Html

c# - 如何返回 "Grouped by"聚合结果?

c# - 多线程集合锁类型

xml - 为什么 XInclude 将 < 和 > 转义为 XML/HTML 字符实体 < 和 >?

c# - 关于 XML 文件大小限制

c# - 按文件创建日期排序(并枚举)目录列表?

c# - 使用 LINQ 递增 ID