我正在调用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等等。
答案 0 :(得分:2)
客户是否会拥有多个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循环中自己创建它,同时增加整数以添加到每个名字和姓氏属性的结尾。这不是xml应该如何工作的。
答案 1 :(得分:2)
我知道你的痛苦;必须处理第三方API可能会非常痛苦。
您可以使用StringBuilder
。
XElement
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);
将该行放入循环中,然后就完成了设置。
答案 2 :(得分:0)
我认为最简单的解决方案是最好的:
假设您有一组名为Customers ...的客户对象
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++;
}