首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Array传递给SOAP?

如何将Array传递给SOAP?
EN

Stack Overflow用户
提问于 2016-05-30 06:49:46
回答 2查看 816关注 0票数 0

我需要将这个数组作为参数传递给SOAP。后端程序是构建API (C#/.NET)的新手,我以前从未实现过这种API。有4-5,所以问题与此有关。但根据我的查询,它们都不是解决方案。

代码语言:javascript
复制
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/‘预期的End元素'record’。找到文本'( 1,2 )‘。

有一件事我知道我不能直接将数组传递给soapBody。还有什么可供选择的?

API在后端运行得很好.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-01 04:19:10

最后,我用以下代码解决了这个问题:

代码语言:javascript
复制
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)的类型。

票数 0
EN

Stack Overflow用户

发布于 2016-05-30 07:16:56

一些评论:

代码语言:javascript
复制
NSArray *arr = [NSArray arrayWithObjects:@"1",@"2", nil];

请代写以下现代表格:

代码语言:javascript
复制
NSArray *arr = @[@"1",@"2"];

而且,你的问题被错误类型的引号(“1”)填满了。确保使用常规引号,即"

当您在%@中使用"stringWithFormat“并提供一个数组时,您必须了解所得到的结果。让我们试试:

代码语言:javascript
复制
NSArray *arr = @[@"1",@"2"];
NSString *str = [NSString stringWithFormat:@"<%@>", arr];
NSLog(@"%@", str);

结果是:

代码语言:javascript
复制
<(
    1,
    2
)>

这意味着在<record></record>之间插入了两个数字,用逗号分隔,用圆括号包围,加上一些\n

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

因此,我没有解决您的问题,但是您必须以正确的方式格式化字符串,并使用NSLog命令验证它。希望它能帮上忙。

编辑

例如,如果需要在<value>...</value>中提供数组的值,则可以这样做:

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

结果将是

代码语言:javascript
复制
<record><value>1</value><value>2</value></record>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37519284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档