2011-03-19 20 views
0

鑑於以下XML,我需要能夠獲取Household_Services類別中的用戶名稱。將屬性值選擇到列表中<string>

<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <category id="Household_Services"> 
    <users> 
     <add name="ESB"/> 
     <add name="BordGais"/> 
     <add name="Eircom"/> 
    </users> 
    </category> 
    <category id="Financial_Accounts"> 
    <users> 
     <add name="BankOfIreland"/> 
     <add name="AIB"/> 
    </users> 
    </category> 
    <category id="Health_Records"> 
    <users> 
     <add name="VHI"/> 
     <add name="IrishLife"/> 
    </users> 
    </category> 
</root> 

我能得到的最接近的是

string category = "Household_Services"; 

var users = from n in xe.Elements("category") 
      where (string)n.Attribute("id") == category 
      select n.Element("users").Elements("add").Attributes("name"); 

這給了我一個IEnumerable<XAttribute>,但我需要的是一個List<string>

任何想法我需要改變?

感謝,

大衛

回答

2

改變這一行

select n.Element("users").Elements("add").Attributes("name"); 

select n.Element("users").Elements("add").Attributes("name").Select(a => a.ToString()).ToList(); 
1

您有權訪問你的XAttribute的值屬性。

要麼

var attributes = from n in xe.Elements("category") 
     where (string)n.Attribute("id") == category 
     from attribute in n.Element("users").Elements("add").Attributes("name") 
     select attribute.Value 
var users = attributes.Select(x => x.Value); 

var users = from n in xe.Elements("category") 
     where (string)n.Attribute("id") == category 
     from attribute in n.Element("users").Elements("add").Attributes("name") 
     select attribute.Value 

將向伎倆。

+0

非常感謝Zebi。 – dlarkin77 2011-03-19 18:41:02