<Fruit>
<Apple>
<Pear>dar</Pear>
<Orange/>
<Starfruit>har</Starfruit>
</Apple>
<Lemon>
<Melon>yar</Melon>
<Lime>blah</Lime>
</Lemon>
<Fruit>
目前我有两个select语句,然后将这两个单独的枚举中的值存储到一个对象中。
var myfruits = from myfruit in document.Descendants("UserAccount")
select new
{
Pear= myfruit.Element("Pear").Value,
Starfruit= myfruit.Element("Starfruit").Value,
};
var myfruits2 = from myfruit2 in document.Descendants("Product")
select new
{
Melon= myfruit2.Element("Melon").Value,
Lime= myfruit2.Element("Lime").Value,
};
foreach (var myfruit in myfruits)
{
megafruit.Pear=myfruit.Pear;
megafruit.Starfruit=myfruit.Starfruit;
}
foreach (var myfruit2 in myfruits2)
{
megafruit.Melon= myfruit2.Melon;
megafruit.Lime= myfruit2.Lime;
}
return megafruit;
答案 0 :(得分:0)
您可以在展开查询结果时导航XML文档(因为您拥有所有后代节点的集合)。像这样:
XDocument document = XDocument.Parse("<Fruit><Apple><Pear>dar</Pear><Orange/><Starfruit>har</Starfruit></Apple><Lemon><Melon>yar</Melon><Lime>blah</Lime></Lemon></Fruit>");
var megafruit = (from x in document.Descendants("Fruit")
select new
{
Pear = x.Element("Apple").Element("Pear").Value,
Orange = x.Element("Apple").Element("Orange").Value,
Starfruit = x.Element("Apple").Element("Starfruit").Value,
Melon = x.Element("Lemon").Element("Melon").Value,
Lime = x.Element("Lemon").Element("Lime").Value
}).SingleOrDefault();
这将生成一个匿名类,其属性已填充所提供的XML的值。或者,您也可以使用select new Megafruit()而不是仅选择new - 这将创建Megafruit类的新实例,其属性根据XML设置。
请注意,这是一个非常简单的例子,假设每个果实出现一次 - 它类似于我多年前在工作中所做的事情,我知道我得到的数据不会是一个集合(如梨,或橙子等等的集合,所以我可以使用SingleOrDefault。