2016-03-31 36 views
0

获得母公司的项目我有一个简单的XML:Linq2Xml - 基于子女的属性值

<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.

回答

0

尝试

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

谢谢,它工作得很好。 – Detonator