我有以下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这一事实,它工作正常。
答案 0 :(得分:1)
您应该使用r
作为子列表的起点,而不是“全局”根xml
:
SelectedIds = r.Descendants("SelectedIds")
.SelectMany(p => p.Descendants("Id").Select(x => (int)x))
.ToList()