Дубликаты тегов в nusoap

Я использую 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 ответа

Проблема с внутренним массивом ()

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

создает массив с одним ключом ("элемент").

Попробуйте это и посмотрите, работает ли это:

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

Хотя никаких гарантий... Я давно не использовал nusoap и здесь не установлен PHP для его тестирования.

Мы решили эту проблему, передав строку вместо массива в функцию вызова nusoap. пожалуйста, проверьте ссылку ниже http://fundaa.com/php/solved-duplicate-tags-in-nusoap/

Это странно, потому что метод:

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

работает от меня. Как объяснено в этой ссылке

Может быть, вам нужна более новая версия nusoap?

Ваша основная проблема - вы пишете неверный код 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

Другие вопросы по тегам