【问题标题】:duplicate tags in nusoapnusoap中的重复标签
【发布时间】:2010-09-22 00:19:52
【问题描述】:

我正在使用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>

如何做到这一点?

【问题讨论】:

    标签: php arrays soap nusoap


    【解决方案1】:

    问题在于内部数组()

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

    使用单个键(“item”)创建一个数组。

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

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

    但不能保证...我已经很长时间没有使用过 nusoap,也没有在此处安装 PHP 来测试它。

    【讨论】:

      【解决方案2】:

      您的核心问题是您编写的 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

      【讨论】:

        【解决方案3】:

        这很奇怪,因为方法:

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

        我的作品。如解释 in this link

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 请不要只发布指向您自己网站的链接,而是在此处发布实际解决方案。或者,如果解决方案很长,至少在您的答案中发布一个摘要。
          猜你喜欢
          • 2016-05-14
          • 2019-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-03
          • 2016-01-20
          • 2015-04-05
          相关资源
          最近更新 更多