学习 Linq 到 XML 并尝试从 xml 节点创建对象
本文关键字:xml 节点 创建对象 Linq XML 学习 | 更新日期: 2023-09-27 18:33:47
我正在学习 LINQ to XML。
假设我有一个这样的 xml:
<main>
<machine>
<car name="HONDA">
<model name="ACCORD"/>
</car>
<car name="HONDA">
<model name="CRV"/>
</car>
<car name="FORD">
<model name="FOCUS"/>
</car>
etc.......
</machine>
</main>
我有一个对象叫做:
public class MyCar
{
public MyCar() { }
public MyCar(string m1, string m2)
{
Make = m1;
Model = m2;
}
public string Make { get; set; }
public string Model{ get; set; }
}
使用 LINQ 如何完成在语句中设置"模型"?
var cars = from g in doc.Elements("main").Descendants("machine")
select g;
var listCars = from c in cars.Descendants("car")
select new MyCar
{
Make = c.Attribute("name").Value,
Model= ""
};
我正在使用 4.0 框架。
您可以使用
Element
方法:
var listCars = from c in cars.Descendants("car")
select new MyCar
{
Make = c.Attribute("name").Value,
Model= c.Element("model").Attribute("name").Value
};
更新
如果您将 xml 架构更改为评论中显示的架构,则可以通过以下方式过滤汽车:
var listCars = from c in cars.Descendants("car")
let doors= c.Elements("model").FirstOrDefault(e=>e.Attribute("name").Value=="doors")
where doors!=null && doors.Value=="4 Doors"// this way you can get the cars that only have 4 doors
select new MyCar
{
Make = c.Attribute("name").Value,
//...
};