学习Linq到XML并尝试从xml节点创建一个对象

时间:2016-02-08 17:25:20

标签: c# xml linq

我正在学习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框架。

1 个答案:

答案 0 :(得分:2)

您可以使用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,
                 //...
               };