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

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

您可以使用

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,
                 //...
               };