1

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

4

3 回答 3

2

一个客户会有多个名字和多个姓氏吗?如果每个 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 应该如何工作的。

于 2013-02-19T17:20:01.083 回答
2

我知道你的痛苦;不得不处理 3rd 方 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);

把那条线放在一个循环中,你就准备好了。

于 2013-02-19T17:59:39.490 回答
0

我认为最简单的解决方案在这里是最好的:

假设您有一组称为客户的客户对象...

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++;
}
于 2013-02-19T17:46:51.657 回答