gpt4 book ai didi

C# : The best solution to parse the xml file?

转载 作者:太空宇宙 更新时间:2023-11-03 17:45:47 25 4
gpt4 key购买 nike

我可以将这个员工对象的信息写入 XML 文件。看起来像这样。

员工类

class Employee
{
int _id;
string _firstName;
string _lastName;
int _salary;
string _text;
public Employee(int id, string firstName, string lastName, int salary,string text)
{
this._id = id;
this._firstName = firstName;
this._lastName = lastName;
this._salary = salary;
this._text = text;
}
public int Id { get { return _id; } }
public string FirstName { get { return _firstName; } }
public string LastName { get { return _lastName; } }
public int Salary { get { return _salary; } }
public string Text { get { return _text; } }
}

编写Xml。

<Employees>
<Employee Text="text1">
<ID>1</ID>
<FirstName>David</FirstName>
<LastName>Smith</LastName>
<Salary>10000</Salary>
</Employee>
<Employee Text="text2">
<ID>3</ID>
<FirstName>Mark</FirstName>
<LastName>Drinkwater</LastName>
<Salary>30000</Salary>
</Employee>
<Employees>

然后我想将 xml 解析回 Employee 对象,最好的解决方案是什么?

最佳答案

就个人而言,我会使用 LINQ to XML:

XDocument doc = XDocument.Load("employees.xml");
var employees = doc.Root.Elements("Employee")
.Select(e => new Employee(
(int) e.Attribute("ID"),
(string) e.Attribute("FirstName"),
(string) e.Attribute("LastName"),
(int) e.Attribute("Salary"))
.ToList();

请注意,这目前不执行任何属性存在的验证。如果您需要更复杂的验证和构建,您可以将查询更改为:

XDocument doc = XDocument.Load("employees.xml");
var employees = doc.Root.Elements("Employee")
.Select(Employee.FromXElement)
.ToList();

其中 Employee.FromXElement 是一个静态方法,它知道如何从 XElement 创建 Employee 的详细信息。然后,您可能需要 ToXElement实例 方法来执行反向操作。我以前使用过这种模式并取得了巨大成功。

虽然您当然可以使用 XML 序列化,但我发现这往往不如“自定义”序列化灵活,就它可以产生的输出、它可以接受的输入以及允许您以应对类型中不断变化的数据集。正如 Darin 所展示的,它还对类型提出了各种要求,这些要求可能不适合您设计的其余部分 - 例如您令人愉快的不可变当前类型。

另一方面,内置的 XML 序列化将更好地处理引用完整性等问题。

关于C# : The best solution to parse the xml file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4766898/

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