构建具有默认值的XML的最佳方法

3

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

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

我需要构建一个XML。考虑以下因素,哪种方法最好:
方法一(当前方法): 创建以下类的实例,注入表单数据,并将其序列化为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 文档。例如,一个文件(Membership.xml)将定义 XML 文档的总体结构,另一个文件将定义仅客户端的结构。
如果我想要创建一个客户端列表,我将创建几个客户端 XML 文件的实例,并将其附加到 Membership.xml 实例的 Clients 节点。
是否有更好的方法?

你打算将XML文件用作应用程序数据库吗?当你说最佳方法时,是指让代码易于人类理解的必要条件吗?XML处理性能?数据结构?你在寻找什么? - Thiago Avelino
@Thiago Avelino 这个XML将作为HTTP请求发送到API。我正在尝试找到设置API期望的默认值,例如账户类型代码等永远不会更改的最佳方法。 - CodeMonkey
假设您也控制另一端 - 对于Web请求,使用JSON可能是更好的方法 :)(特别是如果您曾经尝试从浏览器中使用它)。 - Alexei Levenkov
@Alexei Levenkov,这不是我的API,所以很遗憾我对它的控制非常有限。对于这个特定的请求,它只接受XML :( - CodeMonkey
如果是我,我会使用SQL Lite来存储我的记录,这样我就有了一个实际的数据库,然后将数据库序列化为XML文件,基本上是一个转储操作。这样你就可以利用EntityFramework、Micro ORM或者直接使用ADO.Net从文件中查询信息,而不必将整个文件加载到内存中进行处理。 - Ryan Mann
显示剩余6条评论
2个回答

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

你好,感谢回复。这正是我想到的,但是从已经设定好默认值的 XML 文件中引入 XML 是否更容易些呢?目前我也遇到类似的问题,每次创建类实例时都必须设置默认值。谢谢告诉我如何动态创建 XML 节点,我之前不知道这个方法。 - CodeMonkey

1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接