【问题标题】:PHP SOAP return array of same name elements with attributesPHP SOAP返回具有属性的同名元素数组
【发布时间】:2018-05-14 18:14:21
【问题描述】:

我正在尝试以将值发送到我的肥皂服务器的方式返回值,以便它们具有相同的 XML 结构。

这是一个针对具有不同属性的多个策略的示例请求。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="https://customer-soap.example.com/?WSDL">
   <soapenv:Header/>
   <soapenv:Body>
      <wsdl:SendPoliciesRequestInput>
         <sesid>someid</sesid>
         <!--Optional:-->
         <policy product="product1" company="ges1" polizzenNr="pol1" premium="1" expiry="01.01.2000" info="blabla1"/>
         <policy product="product2" company="ges2" polizzenNr="pol2" premium="2" expiry="02.01.2000" info="blabla2"/>
      </wsdl:SendPoliciesRequestInput>
   </soapenv:Body>
</soapenv:Envelope>

在我的 php 代码中,这将转换为包含 sesidpolicy 元素数组的对象,如下所示:(print_r($request))

stdClass Object
(
    [sesid] => someid
    [policy] => Array
        (
            [0] => stdClass Object
                (
                    [product] => product1
                    [company] => ges1
                    [Nr] => pol1
                    [premium] => 1
                    [expiry] => 01.01.2000
                    [info] => blabla1
                )

            [1] => stdClass Object
                (
                    [product] => product2
                    [company] => ges2
                    [Nr] => pol2
                    [premium] => 2
                    [expiry] => 02.01.2000
                    [info] => blabla2
                )

当试图将这个确切的对象返回给调用者时,下面的代码

<php
class Example
{
  public function SendPolicies($request)
  {
    return $request;
  }
}

这样的输出:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="https://customer-soap.example.com/?WSDL">
       <soapenv:Header/>
       <soapenv:Body>
          <wsdl:SendPoliciesRequestOutput>
             <sesid>someid</sesid>
             <!--Optional:-->
             <policy />
          </wsdl:SendPoliciesRequestOutput>
       </soapenv:Body>
    </soapenv:Envelope>

我尝试了几种方法,包括创建SoapVar,但这只会重构对象,而不是创建与输入完全相同的输出。

非常感谢每一个帮助。

【问题讨论】:

    标签: php xml soap


    【解决方案1】:

    我最终使用了mounties 解决方案: https://stackoverflow.com/a/24894102/8247069

    所以不理想。另一种方法是自己编写 XML:

    $soap->param = new SoapVar("<param attrName='attributeName'>value</param>", XSD_ANYXML);
    

    我不喜欢任何一种方式,但是当你有最后期限时,你会选择 什么有效。

    问题似乎是我的代码在服务器端,因此(据我在研究期间发现)尽管我的服务器是使用 WSDL 启动的,但我无法切换到 WSDL 模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-29
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      相关资源
      最近更新 更多