2014-09-29 74 views
1

我从SOAP WSDL呼叫响应:PHP SOAP响应 - 如何解读它作为变量

$client = new SoapClient($settings['address']); 
$params = new stdClass(); 
$params->Username = $settings['username']; 
$params->Password = $settings['password']; 
var_dump($client->Get_Brands($params)); 

下面是响应。如何在PHP中实际读取它?我是否需要用DOMDocument来遍历它,或者是否有像返回SOAP结果到对象或数组那样的东西?

<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet"> 
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Table" msdata:UseCurrentLocale="true"> 
     <xs:complexType> 
      <xs:choice minOccurs="0" maxOccurs="unbounded"> 
       <xs:element name="Table"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="ID" type="xs:decimal" minOccurs="0"/> 
          <xs:element name="Description" type="xs:string" minOccurs="0"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:choice> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
    <DocumentElement xmlns=""> 
     <Table diffgr:id="Table1" msdata:rowOrder="0"> 
      <ID>1</ID> 
      <Description>Alfa Romeo</Description> 
     </Table> 

     <Table diffgr:id="Table2" msdata:rowOrder="1"> 
      <ID>2</ID> 
      <Description>Alpina</Description> 
     </Table> 
    </DocumentElement> 
</diffgr:diffgram> 

回答

-1

您应该传递有效的WSDL定义作为SoapClient()的第一个参数。 你也可以设置一些特定的选项作为第二个参数(例如soap_version)。 通常不需要解析SOAP响应 - 您应该得到某种类型的方法结果。 但是,如果无效SoapClient中的SOAP响应无法自动识别并解析它,则可能需要使用DOMDocument或SimpleXML手动解析它。

+0

什么是有效的WSDL定义以及为什么我应该通过它?第二个论点是什么和什么额外的通过?你什么意思不需要解析?我得到的Web服务只是返回XML数据库行,这是我可以得到这些信息的唯一方式,但是有没有一些类为程序员提供序列化XML输出缓解? – 2014-09-29 22:45:41