动态生成XML节点
本文关键字:节点 XML 动态 | 更新日期: 2023-09-27 18:00:19
我正在调用一个API,并且必须用C#发送一个xml请求,其中包含不同节点中的数据。如何在增量命名中动态生成xml并使用节点。
例如
<?xml version="1.0" encoding="UTF-8" ?>
<addCustomer>
<FirstName_1>ABC</FirstName_1>
<LastName_1>DEF</LastName_1>
<FirstName_2>GSH</FirstName_2>
<LastName_2>ADSF</LastName_2>
</addCustomer>
问题是使xml节点具有增量名称,如FirstName_1、FirstName_2、FirstName _3等。
客户会有多个FirstName和多个LastName吗?如果每个FirstName和LastName对代表不同的客户,那么您的xml应该看起来像。。。。
<?xml version="1.0" encoding="UTF-8" ?>
<AddCustomers>
<Customer>
<FirstName>ABC</FirstName>
<LastName>DEF</LastName>
</Customer>
<Customer>
<FirstName>GSH</FirstName>
<LastName>ASDF</LastName>
</Customer>
</AddCustomers>
如果你必须按照你在示例中的方式来做,我看不出有任何方法可以做到这一点,除了使用string_builder并在for循环中自己创建它,同时递增整数以添加到每个First和last name属性的末尾。xml实际上并不是这样工作的。
我知道你的痛苦;必须与第三方API打交道可能会带来很大的痛苦。
您可以使用XElement
而不是使用StringBuilder
。
public void AddCustomerInfo(string firstName, string lastName, int index, XElement root)
{
XElement firstNameInfo = new XElement("FirstName_" + index);
firstNameInfo.Value = firstName;
XElement lastNameInfo = new XElement("LastName_" + index);
lastNameInfo.Value = lastName;
root.Add(firstNameInfo);
root.Add(lastNameInfo);
}
然后按如下方式调用函数:
XElement rootElement = new XElement("addCustomer");
AddCustomerInfo("ABC", "DEF", 1, rootElement);
把那条线放在一个圆圈里,你就做好了。
我认为最简单的解决方案是最好的:
假设您有一个名为Customers的Customer对象集合。。。
StringBuilder xmlForApi = new StringBuilder();
int customerCounter = 1;
foreach(Customer c in Customers)
{
xmlForApi.AppendFormat("<FirstName_{0}>{1}</FirstName_{0}><LastName_{0}>{2}</LastName_{0}>", customerCounter, c.FirstName, c.LastName)
customerCounter++;
}