如何从PHP中的复杂肥皂响应中获取价值

时间:2014-08-05 08:27:14

标签: php xml soap

我用

print "<br />\n Response: ".htmlspecialchars($client->__getLastResponse());

然后我从肥皂回应得到这个回应:

Response: <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetAllCompaniesResponse xmlns="http://tempuri.org/"><GetAllCompaniesResult><xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="PROD.CLIENTS" msprop:BaseTable.0="CLIENTS" msprop:BaseSchema="PROD"><xs:complexType><xs:sequence><xs:element name="COMPANYNAME" msprop:BaseColumn="COMPANY1" msprop:OraDbType="126" type="xs:string" minOccurs="0" /><xs:element name="CODE" msprop:BaseColumn="CODE" msprop:OraDbType="112" type="xs:int" 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"><NewDataSet xmlns=""><PROD.CLIENTS diffgr:id="PROD.CLIENTS1" msdata:rowOrder="0"><COMPANYNAME> WSQ IMPLEMENT OEE FOR PRODUCTIVITY IMPROVEMENT (14042014) CIP</COMPANYNAME><CODE>5671</CODE></PROD.CLIENTS><PROD.CLIENTS diffgr:id="PROD.CLIENTS2" msdata:rowOrder="1"><COMPANYNAME>10DOLLARSCOMPANY</COMPANYNAME>

等(这是一个长响应消息)

我想在标签之间得到每个名字,但我无法弄清楚这个输出的结构,我也看到标签名称有一些特殊字符,如“:”或“。”这让我感到困惑。你能给我一些帮助吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

问题是您通过该方法调用获得了整个SOAP一致性响应。但是你只想要对你感兴趣的部分。这是SOAP函数调用的返回值:

根据SoapClient::__getLastResponse()的手册:

$client = SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
echo "Response:\n" . $client->__getLastResponse() . "\n";

您可能希望使用$result解析$xml = simplexml_load_string($result)。它包含您想要的数据。虽然$client->__getLastResponse()包含整个SOAP响应,而不仅仅是SomeFunction SOAP-API调用的返回数据。

但是为了得到更具体的答案,我们必须看到你的PHP SOAP代码。

答案 1 :(得分:0)

我找到了答案,环顾四周,再次测试和测试...... 方法如下:

$result = $client->__getLastResponse();
$doc = DOMDocument::loadXml($result);
$count =$doc->getElementsByTagName('COMPANYNAME')->length;

希望它能帮助那些与我有同样问题的人。谢谢大家!