1

我正在使用nusoap连接到一个肥皂网络服务。类发送给服务的 xml 是从一个数组构造的,即:

$params = array("param1" => "value1", "param2" => "value1");
$client->call('HelloWorld', $params, 'namespace', 'SOAPAction');

这工作正常。多维数组还构造了一个漂亮的嵌套 xml 消息。

当我需要两个具有相同名称的标签时遇到问题:

<items>
   <item>value 1</item>
   <item>value 2</item>
</item>

$params = array("items" => array("item" => "value 1", "item" => "value 2"));

数组中的第二项覆盖第一项,导致:

<items>
   <item>value 2</item>
</item>

怎样才能做到这一点?

4

4 回答 4

2

问题在于内部数组()

$test_array = array("item" => "value 1", "item" => "value 2");

创建一个具有单个键(“项目”)的数组。

试试这个,看看它是否有效:

$params = array("items" => array("item" => array("value 1", "value 2")));

没有保证,但是...我很长时间没有使用 nusoap并且没有在这里安装 PHP 来测试它。

于 2008-11-12T16:10:35.440 回答
1

我们通过将字符串而不是数组传递给 nusoap 调用函数来解决这个问题。请查看以下链接 http://fundaa.com/php/solved-duplicate-tags-in-nusoap/

于 2012-02-07T12:57:54.437 回答
1

这很奇怪,因为方法:

$params = array('items' => array('item' => array('value1', 'value2')))
$client->call( 'action', $params );

我的作品。如此链接中所述

也许您需要更新版本的 nusoap?

于 2009-01-02T09:14:05.123 回答
1

您的核心问题是您正在编写无效的 PHP 代码

$x = array("items" => array("item" => "value 1", "item" => "value 2")); 
var_dump($x);

array(1) {
  ["items"]=>
  array(1) {
    ["item"]=>
    string(7) "value 2"
  }
}

哪个当然行不通,因为它的同义词

 $x = array(); 
 $x['items'] = array(); 
 $x['items']['item']='value 1'; 
 $x['items']['item']='value 2'; 

这当然行不通。

您最好的选择是

 array("items"=>array( "value1","value2") );  

并希望数字键能够“工作”或

 array("items"=>array("item"=>array("value1","value2"))) 

如果它是如此倾斜。

此外

查看 sourceforge 上的示例,看起来这是有效的语法:

$params = '<person xsi:type="tns:Person"><firstname xsi:type="xsd:string">Willi</firstname><age xsi:type="xsd:int">22</age><gender xsi:type="xsd:string">male</gender></person>';
$result = $client->call('hello', $params);

http://nusoap.cvs.sourceforge.net/viewvc/checkout/nusoap/samples/wsdlclient3b.php _ _

这个显示使用未键入(即:数字)数组作为输入源: http : //nusoap.cvs.sourceforge.net/viewvc/checkout/nusoap/samples/wsdlclient4.php

于 2008-11-12T16:26:03.117 回答