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

标签 c# xml xml-parsing

我可以将这个员工对象的信息写入 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/

相关文章:

xml - Xpath:简单条件检查并在 Xpath 表达式中赋值

xml - 我在哪里可以找到 wddx.dtd 的副本?

c# - 如何获取可用系统内存的大小?

java - XSD创建问题

java - 如何使用 JAXB 生成唯一的元素名称或自动递增的元素名称?

php - Prestashop 1.6.0.9 - 循环中的 $product->save() 只需要 10 个产品

ios - 字典中的字符串值是字符串的两倍

c# - 关于 Endian-ness 和 .Net 的详细信息?

c# - WPF 中的模糊转换文本

c# - 如何通过 SSO (SAML) 使用 WebEx 的 XML-API