使用某些默认值构建 XML 的最佳方法

本文关键字:XML 最佳 方法 构建 默认值 | 更新日期: 2023-09-27 17:55:32

我需要创建一个大型XML文档。问题是有很多默认值永远不会改变。哪种方法最适合生成以下 XML 片段。

<Membership>
   <Clients>
      <Client>
        <FirstName>Bilbo</FirstName>
        <LastName>Baggins</LastName>
      </Client>
  </Client>
</Membership>

我必须构建一个 XML。考虑以下几点的最佳方法是什么:

方法1(我目前的方法)

创建以下类的实例,从窗体中注入数据,并将其序列化为 XML。

public class Membership
{
    public List<Account> Accounts {get;set;}
    //Other Properties
} 
public class Account
{
    List<Client> Clients { get; set; }   
}
public class Client
{
   public ClientDetails Details { get; set; }
   public Boolean WebAccess     { get; set; }
}
public class ClientDetails
{
   public string FirstName      { get; set; }
   public string LastName       { get; set; }
}

某些属性的值依赖于其他属性,例如标题上的性别(如果标识为先生,则将性别设置为男性)。据我了解,我不能使用上面指定的自动实现属性来执行此操作。我不想避免这种方法,因为这将涉及一个大型构造函数。

方法2

使用创建各种 XML 文档的实例来构建整个 XML 文档。例如,一个文件(成员资格.xml)将定义 XML 文档的整体结构,而另一个文件将仅定义客户端的结构。

如果我想创建一个客户端列表,我会创建客户端.xml文件的多个实例,并将其附加到成员资格.xml的"客户端"节点。

有没有更好的方法?

使用某些默认值构建 XML 的最佳方法

如果可能的话,请使用数据库。

如果您没有数据库选项,我建议您采用多个 XML 文件方法(第二个选项),因为您可能有多个并发 HTTP 请求,处理多个文件会更有效,比所有用户共享的 1 个 xml 文件更好。

也许这对你有用:

    static void Main(string[] args)
    {
        List<KeyValuePair<string, string>> clientNames = new List<KeyValuePair<string, string>>();
        // substitute with values from a file or database
        clientNames.Add(new KeyValuePair<string, string>("Bilbo", "Baggins"));
        clientNames.Add(new KeyValuePair<string, string>("Frodo", "Baggins"));
        var xml = BuildXml(clientNames);
        Console.WriteLine(xml);
        Console.ReadKey();
    }
    static XElement BuildXml(IEnumerable<KeyValuePair<string, string>> clientNames)
    {
        XElement membership = new XElement("Membership");
        XElement clients = new XElement("Clients");
        membership.Add(clients);
        foreach (var kvp in clientNames)
        {
            XElement client = new XElement("Client");
            client.Add(new XElement("FirstName", kvp.Key), new XElement("LastName", kvp.Value));
            clients.Add(client);
        }
        return membership;
    }