使用某些默认值构建 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 文件方法(第二个选项),因为您可能有多个并发 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;
}