【问题标题】:Trying to loop through SOAP result from cURL尝试遍历 cURL 的 SOAP 结果
【发布时间】:2013-10-05 01:19:08
【问题描述】:

我一直在绞尽脑汁想办法解决这个问题。我有一个从肥皂电话中获得的 XML。我可以回显结果,但我不知道如何进入并遍历数据。我是肥皂新手(你可能会说)。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
         <ActivityId xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics" CorrelationId="18b2719b-e13a-41d7-ab1c-eb3319a2fd64">a588ead5-ecce-42bb-bcb3-b6f13ddc3846</ActivityId>
    </s:Header>
    <s:Body>
    <GetMBDataResponse xmlns="http://blah.com/APO">
        <GetMBDataResult xmlns:a="http://blah.com/APO/GetGuestData" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
            <a:Project>
                <a:ProjectId>12345</a:ProjectId>
                <a:AlternateId/>
                <a:Name>Summer Vacation</a:Name>
                <a:Date>2014-05-17T00:00:00</a:Date>
                <a:ProjectType/>
                <a:Organization>My Org</a:Organization>
            </a:Project>
            <a:DeletedProject i:nil="true"/>
            <a:Guests>
                <a:MBData.BData>
                    <a:ProjectId>12345</a:ProjectId>
                    <a:BId>11979066</a:BId>
                    <a:Name>John Smith</a:Name>
                    <a:Number>101</a:Number>
                    <a:First>John</a:First>
                    <a:Last>Smith</a:Last>
                </a:MBDData.BData>
                <a:MBData.BData>
                    <a:ProjectId>12345</a:ProjectId>
                    <a:BId>11979067</a:BId>
                    <a:Name>Nancy Wilson</a:Name>
                    <a:Number>102</a:Number>
                    <a:First i:nil="true"/>
                    <a:Last i:nil="true"/>
                </a:MBData.BData>
            </a:Guests>
        </GetMBDataResult>
        ...
    </GetMBDataResponse>
</s:Envelope>

从 cURL 返回后,我尝试simplexml_load_string($xml),但我不知道如何进入那里并循环遍历 MBData 并获取详细信息。我确信这很明显,但我似乎明白了。

更新

这是 WSDL 的一部分:

 <xs:complexType name="Authentication">
   <xs:sequence>
   <xs:element name="PartnerId" nillable="true" type="xs:string"/>
   <xs:element name="UserName" nillable="true" type="xs:string"/>
   <xs:element name="Password" nillable="true" type="xs:string"/>
   </xs:sequence>
 </xs:complexType>

您将如何构建您的 SoapClient 身份验证。我不断收到:致命错误:未捕获的 SoapFault 异常:[a:InternalServiceFault] 对象引用未设置为对象的实例。在 /var/www/cron-gg-update.php:36 堆栈跟踪:#0 /var/www/cron-gg-update.php(36): SoapClient->__soapCall('GetMBData', Array)。

【问题讨论】:

  • 当有一个非常好的 SoapClient 类可以为您完成所有事情时,不要将 cURL 用于 SOAP 请求 :)

标签: php xml soap


【解决方案1】:

为此,您应该使用 SOAP 库,例如,它可以在数组中为您提供正确的输出。

有一些库,如 Nusoap 或内部 PHP Soap 函数。

这是一个 PHP Soap 客户端的示例。

http://php.net/manual/en/soapclient.soapclient.php

【讨论】:

  • 没有办法将它读入数组并循环遍历它吗?我正在努力使用 PHP Soap。知道任何基础教程吗?
  • 你可以试试stackoverflow.com/questions/13929566/…这样的东西,但使用肥皂客户端要容易得多;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2010-11-16
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多