2016-05-30 10 views
0

この配列をSOAP APIにパラメータとして渡す必要があります。バックエンドの人は、API(C#/ .NET)を構築するのが初めてで、これまでにこの種のAPIを実装したことはありません。これに関連する4-5の質問があります。しかし、それらのどれもが私の質問ごとの解決策ではありませんでした。ArrayをSOAP APIに渡すには?

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); 

エラー:私はsoapBodyに直接配列を渡すことができないことを知っているようになった

value in string The formatter threw an exception while trying to deserialize the message: Error in deserializing body of request message for operation 'addRecord'. End element 'record' from namespace ' http://tempuri.org/ ' expected. Found text '( 1, 2 )'.

一つ。代わりに何が何ですか?

APIはバックエンドで正常に動作しています。

+0

http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383522 - あなたのスキーマを見て、 'record'要素が正しく定義されていることを確認する必要がありますループを使用して配列を展開し、文字列連結を使用して正しいxmlを構築します。 – Paulw11

答えて

0

I最後になります:EDIT

たとえば、あなたがこれを行うことができるよりも<value>...</value>内の配列の値を提供する必要がある場合は

この問題をこのコードで解決しました:

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)を定義する必要がありました。

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>の間で使用すると、2つの数字、カンマで区切り、括弧で囲まれ、プラスいくつかの\nを挿入することを意味します。

これはサーバーが期待しているものですか?

私はあなたの問題を解決していませんが、あなたの文字列を正しい方法でフォーマットし、NSLogコマンドを使用して確認する必要があります。それが助けになると願っています。

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

あなたが言及したことについてあなたは正しいです。サーバーはそれを配列にすることを期待しています。だから私は配列を渡していますが、正しい形式ではありません。 しかし、キーなしで配列オブジェクトを渡すことはできますか?これは今問題ですか? –

+0

SOAPの場合、おそらく '' ... ''で囲まれた値のシーケンスを提供する必要があります。だからあなたの配列を反復処理し、必要なデータの正しいフォーマットでNSMutableStringを構築し、arrの代わりにその文字列を与えてください – ishahak

+0

例または参照リンクが役立ちます。 –

関連する問題