XML中的PHP SOAP响应 - 如何将其作为变量读取

时间:2014-09-29 17:38:19

标签: php soap wsdl

我从SOAP WSDL调用得到响应:

$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 个答案:

答案 0 :(得分:-1)

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