动态制作XML节点

时间:2013-02-19 17:09:46

标签: c# asp.net .net xml

我正在调用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等等。

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