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

时间:2015-06-10 23:09:01

标签: c# xml oop

我需要创建一个大型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; }
}

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

方法2

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

如果我想创建一个客户列表,我将创建client.xml文件的几个实例,并将其附加到Membership.xml intsance的Clients节点。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

也许这对你有用:

    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;
    }