我有一个嵌套了List的XML,我需要在我的类对象中的所有属性。
类别:
public class Process
{
public Process()
{
Progresses = new List<Progress>();
}
public string Code{ get; set; }
public List<Progress> Progresses { get; set; }
}
public class Progress
{
public string Text { get; set; }
public string ProgressDate { get; set; }
}
XML:
<PROCESSES>
<Process>
<Number>8754639647985</Number>
<Progress>
<Date>09/11/2013</Date>
<Text>Lorem lalal asdf</Text>
<Date>10/11/2015</Date>
<Text>Lorem lal</Text>
</Progress>
<Progress>
<Date>09/12/2016</Date>
<Text>Lorem aqwq</Text>
<Date>10/11/2017</Date>
<Text>Lorem qw</Text>
</Progress>
</Process>
<Process>
<Number>1121321321321321</Number>
<Progress>
<Date>09/11/2013</Date>
<Text>Lorem lalal asdf</Text>
<Date>10/11/2015</Date>
<Text>Lorem lal</Text>
</Progress>
<Progress>
<Date>09/12/2016</Date>
<Text>Lorem aqwq</Text>
<Date>10/11/2017</Date>
<Text>Lorem qw</Text>
</Progress>
</Process>
</PROCESSES>
到现在为止,我有这个Linq:
var _procs =
from proc in xml.Root.Elements("Process")
select new Process()
{
Code = (string)proc.Element("Number"),
Progresses = proc.Elements("Progress")
.Select(c => new Progress
{
Text = (string)c.Element("Text"),
ProgressDate = (string)c.Element("Date")
}).ToList()
};
但是有了这个,我有一个注册到每个Progress标签,而不是一个进程列表!我最大的问题是,我可以读取XML并设置为类过程,我需要在PROCESS对象的List中包含所有PROGRESS标记。
更新: 有了这个Linq,我只获得了Progress嵌套节点的第一个元素。 我该怎么做(如果使用Lambda会更好)? 非常感谢!!!
答案 0 :(得分:1)
正如我在问题compra_id
的评论中所提到的,必须将类声明为Progress
。
另一个问题是:public
不是Num
类的成员!
<强> [编辑] 强>
Progress
以上查询会返回var query = xdoc.Descendants("Process")
.Select(x=> new Process
{
Code = x.Element("Number").Value,
Progresses = x.Descendants("Progress")
.SelectMany((ele, j)=> ele.Elements("Date").Select((a, i)=>new{Date = a.Value, Index = i+(j*10)}))
.Join(x.Descendants("Progress").SelectMany((ele, j)=> ele.Elements("Text").Select((a, i)=>new{Text = a.Value, Index = i+(j*10)})),
dat => dat.Index,
tex => tex.Index,
(dat, tex) => new {D = dat, T = tex})
.Select(jdata=> new Progress
{
//Index = jdata.D.Index,
ProgressDate = jdata.D.Date,
Text = jdata.T.Text
}).ToList<Progress>()
});
列表IEnumerable<Process>
。
Progresses