2011-03-19 6 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>입니다.

내가 바꿀 필요가있는 아이디어가 있습니까?

감사합니다,

데이비드

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

답변

2

변경이 줄을

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

당신은 당신의 XAttribute의 Value 속성에 액세스 할 수 있습니다.

중 하나

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 

.