如何将数组传递给 SOAP API?

问题描述 投票:0回答:2

我需要将此数组作为参数传递给 SOAP API。后端实现者对构建 API (C#/.NET) 很陌生,我以前从未实现过此类 API。有 4-5 个与此相关的 Stack Overflow 问题,但没有一个是我查询的解决方案。

NSArray *arr = [NSArray arrayWithObjects:@"1",@"2", nil];

NSString *soapURL = @"http://tempuri.org/IService1/addRecord";
NSString *soapBody = [NSString stringWithFormat:@"<addRecord xmlns=\"http://tempuri.org/\">"
                      "<id>%@</id>"
                      "<title>%@</title>"
                      "<record>%@</record>"
                      "</addRecord> \n” ,@“1”,@“abc", arr ];

NSLog(@"%@",soapBody);

错误:

字符串中的值格式化程序在尝试反序列化消息时引发异常:反序列化操作“addRecord”的请求消息正文时出错。预期来自名称空间“http://tempuri.org/”的结束元素“记录”。找到文字 '( 1、 2 )'.

我知道的一件事是我无法将数组直接传递给

soapBody
。有什么替代方案吗?

API 在后端运行良好。

ios objective-c soap
2个回答
1
投票

一些评论:

NSArray *arr = [NSArray arrayWithObjects:@"1",@"2", nil];

请写现代形式:

NSArray *arr = @[@"1",@"2"];

此外,您的问题充满了错误类型的引用(

“1”
)。确保使用常规引号,即
"

当您将“stringWithFormat”与 %@ 一起使用并提供一个数组时,您必须了解您将得到什么。让我们尝试一下:

NSArray *arr = @[@"1",@"2"];
NSString *str = [NSString stringWithFormat:@"<%@>", arr];
NSLog(@"%@", str);

结果是:

<(
    1,
    2
)>

这意味着您在

<record>
</record>
之间插入了两个用逗号分隔并用括号括起来的数字,再加上一些
\n

这是您的服务器所期望的吗?

所以我没有解决你的问题,但你必须以正确的方式格式化你的字符串并使用 NSLog 命令验证它。希望对您有帮助。

编辑

例如,如果您需要提供

<value>...</value>
内的数组值,则可以执行以下操作:

NSArray *arr = @[@"1", @"2"];
NSMutableString *mStr = [NSMutableString string];
for (NSString *value in arr) {
    [mStr appendFormat:@"<value>%@</value>", value];
}
NSLog(@"<record>%@</record>", mStr);

结果将会是

<record><value>1</value><value>2</value></record>

0
投票

最后我用这段代码解决了这个问题:

NSString *soapBody = [NSString stringWithFormat:@"< addRecord xmlns=\"http://tempuri.org/\" xmlns:arr=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\" > \n"
                          "<ID>1</ID>\n"
                          "<title>ABC</title>\n"
                          "<record>\n"];

    for (int i=0; i<arrRecord.count; i++) {
        soapBody = [NSString stringWithFormat:@"%@ <arr:int>%@</arr:int>\n",soapBody,arrRecord[i]];
    }

    soapBody = [NSString stringWithFormat:@"%@ </record></addRecord> \n",soapBody];

我需要在父节点中定义“arr”,并在记录数组中定义元素类型(int)。

© www.soinside.com 2019 - 2024. All rights reserved.