2010-03-22 28 views
1

我有下面的類實例化對象從LINQ到XML查詢

public class CountrySpecificPIIEntity 
{ 
public string Country { get; set; } 

public string CreditCardType { get; set; } 

public String Api { get; set; } 

public List<String> FilterList { get; set; } 
} 

我試圖使用的LINQ to XML查詢創建類型CountrySpecificPIIEntity的實例的列表。 的XML是如下

<piisettings> 
<country countrycode="DE"> 
    <creditcardype credicardtype="mastercard"> 
    <api api="INSERT_FILTERS"> 
    <filters>  
    <filter>FIRSTNAME</filter> 
    <filter>HOUSENUMBER</filter> 
    <filter>ADDITIONALADDRESSINFO</filter> 
    <filter>EMAIL</filter> 
    </filters> 
    </api> 
    </creditcardype> 
    <creditcardype credicardtype="visa"> 
    <api api="INSERT_FILTERS"> 
    <filters> 
    <filter>STATE</filter> 
    <filter>EMAIL</filter> 
    </filters> 
    </api> 
    </creditcardype> 
    <creditcardype credicardtype="visa"> 
    <api api="UPDATE_FILTERS"> 
    <filters> 
    <filter>STATE</filter> 
    <filter>EMAIL</filter> 
    </filters> 
    </api> 
    </creditcardype>  
</country> 
<country countrycode="GB"> 
    <creditcardype credicardtype="americanexpress"> 
    <api api="INSERT_FILTERS"> 
    <filters> 
    <filter>STREET</filter> 
    <filter>ZIP</filter> 
    <filter>CITY</filter> 
    <filter>STATE</filter> 
    <filter>EMAIL</filter> 
    </filters> 
    </api> 
    </creditcardype> 
    <creditcardype credicardtype="debank"> 
    <api api="INSERT_FILTERS"> 
    <filters> 
    <filter>IPADDRESSCUSTOMER</filter> 
    <filter>FIRSTNAME</filter> 
    <filter>SURNAME</filter> 
    <filter>HOUSENUMBER</filter> 
    <filter>STREET</filter> 
    <filter>ZIP</filter> 
    <filter>CITY</filter> 
    <filter>STATE</filter> 
    <filter>EMAIL</filter> 
    </filters> 
    </api> 
    </creditcardype> 
</country> 
</piisettings> 

又該的LINQ to XML查詢呢?

回答

2

如何:

var qry = from country in XElement.Parse(xml).Elements("country") 
       from cc in country.Elements("creditcardype") 
       let api = cc.Element("api") 
       select new CountrySpecificPIIEntity 
       { 
        Country = (string)country.Attribute("countrycode"), 
        CreditCardType = (string)cc.Attribute("credicardtype"), 
        Api = (string)api.Attribute("api"), 
        FilterList = new List<string>(
         from filter in api.Element("filters").Elements("filter") 
         select filter.Value) 
       }; 
+0

這真是棒極了! 不得不作出如我正在錯誤instantiationg物體的微小修改 \t \t \t \t FilterList = api.Elements( 「過濾器」)。後代(),選擇(FL => fl.Value).ToList() – objectsbinding 2010-03-22 21:35:48