дубликаты тегов в nusoap - PullRequest
       11

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

1 голос
/ 12 ноября 2008

Я использую 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 ]

2 голосов
/ 12 ноября 2008

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

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

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

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

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

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

1 голос
/ 07 февраля 2012

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

1 голос
/ 02 января 2009

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

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

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

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

1 голос
/ 12 ноября 2008

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

...