Php 如何将SOAP响应转换为XML或JSON格式? 地位 技术错误 描述 请与管理员联系

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

在上面,我的卷曲反应得到了回应。以下是我的PHP代码:

<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响应数据。您可以在那里查看my
returnvalues
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);