将xml转换为匿名对象列表

时间:2014-10-17 21:33:15

标签: c# xml linq lambda xml-parsing

我有一个xml,其中包含语言详细信息,如

<LanguageList>
   <Language code = "EN-US" name = "English - United Sates"></Language>
   <Language code = "EN-UK" name = "English - United Kingdom"></Language>
    --
    --
</LanguageList>

我想将其转换为匿名对象列表,其中每个对象包含两个字段代码和名称。

我尝试了以下linq表达式

 var anonList = (from u in xDoc.Descendants("LanguageList").DescendantNodes()
                   select u).ToList();

这给了LanguageList下的所有节点,如

   <Language code = "EN-US" name = "English - United Sates"></Language>
   <Language code = "EN-UK" name = "English - United Kingdom"></Language>

我尝试添加一些where子句和其他方式..但无法得到它。任何人都可以帮忙

提前致谢..

3 个答案:

答案 0 :(得分:1)

您需要获取每个节点的属性并创建匿名对象。像这样:

var listOfLanguages = xDoc.Descendants("LanguageList").Descendants()
                          .Select(l => new
                          {
                              Name = l.Attribute("name").Value,
                              Code = l.Attribute("code").Value
                          });

答案 1 :(得分:0)

选择&#34; u&#34;,而不是选择&#34; new {Code = u.Attribute(&#34; code&#34;)。值,Name = u.Attribute(&# 34;姓名&#34;)。价值}&#34;。

答案 2 :(得分:0)

以你拥有的代码为基础:

var anonList = (from u in xDoc.Descendants("LanguageList")
                              .Elements("Language")
                select new 
                       { 
                          Name = (string)u.Attribute("name"),
                          Code = (string)u.Attribute("code")
                       }
                ).ToList();
  1. 使用Elements()代替DescendantNodes()来获取子元素。 2.您可以将XAttribute直接投射到string
相关问题