【问题标题】:Linq2Xml - Getting parent items based on their children's attribute valueLinq2Xml - 根据子项的属性值获取父项
【发布时间】:2016-03-31 18:24:47
【问题描述】:

我有一个简单的 xml:

<forms for="ApplicationTestSettings">
    <form name="Parameter12Settings" title="Parameter12 Settings" url="/Parameter12Settings">
        <roles>
            <role name="Parameter12-Reader" />
            <role name="Parameter12-Writer" can-add="1" can-edit="1" can-delete="0" />
        </roles>
    </form>
    <form name="Parameter34Settings" title="Parameter 34 Settings" url="/Parameter34Settings">
        <roles>
            <role name="Parameter34-Reader" />
            <role name="Parameter34-Writer" can-add="1" can-edit="1" can-delete="0" />
        </roles>
    </form>
</forms>

我需要一个基于角色元素属性值的表单集合。我有一个清单:

List<string> roles = new List<string>();
roles.Add("Parameter12-Reader");
roles.Add("Parameter34-Writer");

我尝试使用此查询获取项目:

var forms = root.Descendants("form")
                .Where(form => roles.Contains(form.Element("roles")
                                                  .Element("role")
                                                  .Attribute("name").Value)).ToList();

不幸的是,此查询仅分析所有表单/角色块中的第一个角色。谁能告诉我,我该如何定义这个查询来获取所有表单元素,其中角色列表包含 xml 角色名称?

谢谢, D.

【问题讨论】:

    标签: xml linq linq-to-xml


    【解决方案1】:

    试试

    var forms = root.Descendants("form")
                    .Where(form => form.Elements("roles")
                                       .Elements("role")
                                       .Attributes("name")
                                       .Any(n => roles.Contains(n.Value))
                           ).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2021-10-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多