gpt4 book ai didi

c# - 使用 LINQ 读取 XML 文件并创建具有 IEnumerable 属性的对象

转载 作者:行者123 更新时间:2023-11-30 22:28:14 26 4
gpt4 key购买 nike

这是我的问题:

我有这个 XML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<settings>
<app name="Application1">
<log name="Log1" path="d:\paths\" filename="Log1File"/>
<log name="Log2" path="d:\paths\"/>
<log name="log3" path="d:\paths\" filename="Log3File"/>
</app>
</settings>

我正在尝试使用 LINQ 读取它并创建此类的对象:

  public class Apps
{
public string Name { get; set; }
public IEnumerable<Logs> Logs { get; set; }
}

public class Logs
{
public string Name { get; set; }
public string Path { get; set; }
public string Filename { get; set; }
}

到目前为止,我设法创建了这段代码,但看起来它只获取了第一个日志元素,同时我需要每个应用程序元素的所有日志元素:

   public static IEnumerable<Apps> GetAllApps()
{
var items = from a in db.Descendants("app")
orderby a.Attribute("name").Value
select new Apps
{
Name = a.Attribute("name").Value,
Logs = from b in a.Descendants("log")
select new Logs
{
Name = b.Attribute("name").Value,
Path = b.Attribute("path").Value,
Filename = b.Attribute("filename").Value
}
};

return items;
}

最佳答案

我会在这里使用序列化

XmlSerializer ser = new XmlSerializer(typeof(Settings));
var result = (Settings)ser.Deserialize(stream);

[XmlRoot("settings")]
public class Settings
{
[XmlElement("app")]
public Apps[] apps;
}


public class Apps
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlElement("log")]
public Logs[] Logs { get; set; }
}

public class Logs
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAttribute("path")]
public string Path { get; set; }
[XmlAttribute("filename")]
public string Filename { get; set; }
}

关于c# - 使用 LINQ 读取 XML 文件并创建具有 IEnumerable 属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10897383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com