2016-03-31 62 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