将Soap XML转换为PHP数组

时间:2017-02-07 06:28:17

标签: php arrays xml web-services soap

我正在尝试创建一个soap请求,我需要将soap xml转换为php数组。但我陷入了一个无法理解如何正确设置数组属性的位置。我对肥皂很新,很好的解释将不胜感激。这是我到目前为止所做的。

我想要创造什么

<arg0>
    <ns2:coverType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:type="ns2:FamilyCoverType">
        <ns2:abc>1978-04-03</ns2:abc>
        <ns2:def>1980-04-03</ns2:def>
        <ns2:pqr>2016-04-10</ns2:pqr>
        <ns2:xyz>2016-05-03</ns2:xyz>
    </ns2:coverType>
</arg0>

我的阵列

$data = array(
        'arg0' => array(
            'coverType' => array(
                'abc' => $abc,
                'def' => $def,
                'pqr' => $pqr,
                'xyz' => $xyz,
            )
        )
    );

一切都很好,除了

  

的xsi:type =&#34; NS2:FamilyCoverType&#34;

如何在我的数组中设置上面的属性?请帮助。

2 个答案:

答案 0 :(得分:1)

我强烈建议您使用WSDL到php生成器,例如PackageGenerator,因为您根本不会想知道如何构建您的请求。如果您使用Eclipse PDT或任何其他良好的IDE与生成的PHP SDK,您将在几秒钟内发送请求。此外,您将非常容易地处理响应,因为您将知道PHP对象,因为它们将作为SDK中的PHP类生成。

答案 1 :(得分:0)

经过两个忙碌的一周后,我终于找到了解决方案。所以我在这里发布我的答案,这样有人可以节省他的时间。

我们可以轻松做到这样的事情,

$param = new \SoapVar('
           <arg0>
               <ns2:coverType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:FamilyCoverType">
                   <ns2:abc>' . $data['abc'] . '</ns2:abc>
                    <ns2:def>' . $data['def'] . '</ns2:def>
                    <ns2:pqr>' . $data['pqr'] . '</ns2:pqr>
                    <ns2:xyz>' . $data['xyz'] . '</ns2:xyz>
               </ns2:coverType>
           </arg0>', XSD_ANYXML);

然后我们可以得到这样的回复,

$response = $client->your_calling_function($param);

就目前而言,

  

XSD_ANYXML

是关键。

如果有人仍然遇到麻烦,我很乐意提供帮助。不要犹豫,寻求帮助。