使用Linq从XML文件中读取整数列表

时间:2017-12-27 20:43:56

标签: c# xml linq

我有以下XML文件:

<Application>
<Items>
    <Item>
      <Id>0</Id>
      <StartDate>0001-01-11T00:00:00</StartDate>
      <EndDate>0001-01-30T00:00:00</EndDate>
      <ItemType>0</ItemType>
      <Comments>fgdfg</Comments>
      <SelectedIds>
        <Id>108</Id>
        <Id>110</Id>
        <Id>111</Id>
      </SelectedIds>
    </Item>
</Items>

我想阅读代表我的CustomClass的Items列表。我正在使用以下linq查询:

CustomClassList = new ObservableCollection<CustomClass>((from r in xml.Descendants("Application").Descendants("Items").Descendants("Item")
select (new CustomClass()
{
    Id = (int)r.Element("Id"),
    StartDate= DateTime.Parse(r.Element("StartDate").Value),
    EndDate = DateTime.Parse(r.Element("EndDate").Value),
    ItemType = (ItemType)byte.Parse(r.Element("ItemType").Value),
    Comment = r.Element("Comment").Value,
    SelectedIds = new List<int>((from p in xml.Descendants("Application").Descendants("Items").Descendants("Item").Descendants("SelectedIds")
                                 select (int)p.Element("Id")).ToList())

})).ToList());

除了事实上,SelectedIds只包含来自XML而不是所有ID的第一个Id这一事实,它工作正常。

1 个答案:

答案 0 :(得分:1)

您应该使用r作为子列表的起点,而不是“全局”根xml

SelectedIds = r.Descendants("SelectedIds")
               .SelectMany(p => p.Descendants("Id").Select(x => (int)x))
               .ToList()