Php 如何使用项目列表为soap响应定义WSDL复杂类型

Php 如何使用项目列表为soap响应定义WSDL复杂类型,php,xml,web-services,soap,wsdl,Php,Xml,Web Services,Soap,Wsdl,我正在使用php soapServer/soapClient类和wsdl创建一个web服务。有些服务应该返回项目列表。服务返回如下内容: <SOAP-ENV:Envelope ...> <SOAP-ENV:Body> <ns1:getTransactionsResponse> <return xsi:type="ns2:Map"> <item> <key xsi:type

我正在使用php soapServer/soapClient类和wsdl创建一个web服务。有些服务应该返回项目列表。服务返回如下内容:

<SOAP-ENV:Envelope ...>
  <SOAP-ENV:Body>
    <ns1:getTransactionsResponse>
      <return xsi:type="ns2:Map">
        <item>
          <key xsi:type="xsd:string">result</key>
          <value SOAP-ENC:arrayType="ns2:Map[65]" xsi:type="SOAP-ENC:Array">
          <item xsi:type="ns2:Map">
            <item>
              <key xsi:type="xsd:string">id</key>
              <value xsi:type="xsd:int">283</value>
            </item>
            <item>
              ...
            </item>
            ...
          </item>
        </item>
      </return>
    </ns1:getItemsResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<result>
  <item>
    <attr1>value1</attr1>
    <attr2>value2</attr2>
    ....
  </item>
  <item>
    ...
  </item>
</result>
编辑 我的WSDL:


...
端口类型:

<operation name="getTransactions">
  <input message="tns:getTransactionsRequest" />
  <output message="tns:getransactionsResponse" />
</operation>
<operation name="getVirtualTransactions">
  <soap:operation soapAction="urn:getTransactionsAction" />
  <input>
    <soap:body use="encoded" namespace="urn:XYZ" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  </input>
  <output>
    <soap:body use="encoded" namespace="urn:XYZ" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  </output>
</operation>

绑定:

<operation name="getTransactions">
  <input message="tns:getTransactionsRequest" />
  <output message="tns:getransactionsResponse" />
</operation>
<operation name="getVirtualTransactions">
  <soap:operation soapAction="urn:getTransactionsAction" />
  <input>
    <soap:body use="encoded" namespace="urn:XYZ" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  </input>
  <output>
    <soap:body use="encoded" namespace="urn:XYZ" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  </output>
</operation>

我不知道,如果我在谷歌上搜索不好,但我找不到任何解决办法。因此,我很乐意提供一些简单的示例,链接到教程或文档,以及wsdl的外观。或者我必须改变阵列的孔结构?
我正在寻找最佳实践,即如何在服务器端准备响应作为项目数组及其wsdl定义。

问题已解决。我只是将我的响应数组转移到对象中,现在我得到了我问题中所期望的soap响应形式。不知道为什么,但它可以工作。

在任何方面都没有帮助?你能在这里发布,我应该在哪个关键字下搜索它吗?也许我更愿意看到具体的例子,是你在问题中写的,你正在用wsdl创建。目前还不清楚WSDL的哪一部分存在问题。您只显示到目前为止的结果差异。这就是我问的原因。如果您走了那么远,那么也将WSDL定义放在这里,这会给您带来麻烦,否则很难说备选方案是什么。如果不是关于编写您自己的WSDL,请将您的问题说得更清楚。在任何情况下,你都应该提供一个自我包含的例子,可以很容易地执行,重现你的问题。是的,你是对的。这个问题还不完全清楚,但我希望有人能将经过验证的wsdl与我的数组结构对应起来。是我的错。我在问题中添加了实际的wsdl。这就足够了吗?谢谢你花时间为你自己的问题贴出答案。请考虑接受你的答案,让其他人知道这已经被证实了。