Php 如何将SOAP响应转换为XML或JSON格式? 地位 技术错误 描述 请与管理员联系
在上面,我的卷曲反应得到了回应。以下是我的PHP代码:Php 如何将SOAP响应转换为XML或JSON格式? 地位 技术错误 描述 请与管理员联系,php,json,xml,soap,Php,Json,Xml,Soap,在上面,我的卷曲反应得到了回应。以下是我的PHP代码: <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:body> <ns1:mbillcommandresponse xmlns:ns1="http://www.mysoap.com/SoapService/"> <ReturnValu
<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:body>
<ns1:mbillcommandresponse xmlns:ns1="http://www.mysoap.com/SoapService/">
<ReturnValues>
<name>status</name>
<value>TEHNICAL_ERROR</value>
</ReturnValues>
<ReturnValues>
<name>description</name>
<value>Please contact your administrator</value>
</ReturnValues>
</ns1:mbillcommandresponse>
</soapenv:body>
</soapenv:envelope>
$response=curl\u exec($ch);
$xml=simplexml\u load\u字符串($response);
//$result=$xml->xpath('//name')//回声“;打印(结果);出口
$xml->registerXPathNamespace('ns1','http://www.mysoap.com/SoapService/');
foreach($xml->xpath('//returnvalues')作为$item){
$json=json_encode($item);
$convrt\u arr=json\u decode($json,true);
打破
}
打印(json);出口
在我上面的代码中,我得到了空的json。你能帮帮我吗。你的问题编辑是一个很大的线索。您将XML从小写元素更改为CamelCase元素。更改:
foreach ($xml->xpath('//returnvalues') as $item) {
致:
它会起作用的。Xpath查询区分大小写。希望这有帮助
$response = '<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:body>
<ns1:mbillcommandresponse xmlns:ns1="http://www.mysoap.com/SoapService/">
<returnvalues>
<name>status</name>
<value>TEHNICAL_ERROR</value>
</returnvalues>
<returnvalues>
<name>description</name>
<value>Please contact your administrator</value>
</returnvalues>
</ns1:mbillcommandresponse>
</soapenv:body>
</soapenv:envelope>';
$response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
$xml = new SimpleXMLElement($response);
$body = $xml->xpath('//returnvalues');
$json = json_encode((array)$body);
print_r($json);
$response=
地位
技术错误
描述
请与管理员联系
';
$response=preg_replace(“/(]*>)/”、“$1$2$3”、$response);
$xml=新的simplexmlement($response);
$body=$xml->xpath('//returnvalues');
$json=json_encode((数组)$body);
打印(json);
我可以在$xml->xpath('//returnvalues')
中查看数据吗?顺便说一句,Soap是一种xml格式,但这里有一些特殊的库可以处理它。无法重现该问题。它在我的机器上打印{“name”:“status”,“value”:“technical_ERROR”}
。@SupunPraneeth我已经发布了SOAP响应数据。您可以在那里查看myreturnvalues
dataWhy不使用标准SoapClient而不是CURL?这样,您就可以将答案直接转换为PHP对象(假设您提供了类型的映射)。有了SOAP web服务的地址,您就可以通过库为您完成所有必要的工作,比如:相当好奇——为什么要投反对票?如果$response
的值是OP期望的值,那么他的代码将生成与实际不同的结果。感谢您的回答。我的密码是对的。我已经编辑了我的问题。请检查并编辑你的回答好吗。编辑完成。
foreach ($xml->xpath('//ReturnValues') as $item) {
$response = '<soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:body>
<ns1:mbillcommandresponse xmlns:ns1="http://www.mysoap.com/SoapService/">
<returnvalues>
<name>status</name>
<value>TEHNICAL_ERROR</value>
</returnvalues>
<returnvalues>
<name>description</name>
<value>Please contact your administrator</value>
</returnvalues>
</ns1:mbillcommandresponse>
</soapenv:body>
</soapenv:envelope>';
$response = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
$xml = new SimpleXMLElement($response);
$body = $xml->xpath('//returnvalues');
$json = json_encode((array)$body);
print_r($json);