Дубликаты тегов в 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