如何在一个linq语句中解析这个XML ?
本文关键字:XML 语句 一个 linq | 更新日期: 2023-09-27 18:01:25
<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;
您可以在展开查询结果时导航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()而不仅仅是select new——这将创建一个Megafruit类的新实例,并根据XML设置属性。
请注意,这是一个非常简单的示例,假设每个水果都出现一次—这与我在许多月前的工作中所做的类似,我知道我要获得的数据不会是一个集合(如梨,橘子或其他任何东西的集合),因此我可以使用SingleOrDefault。