我需要创建一个大型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节点。
有更好的方法吗?
答案 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;
}