Reputation: 899
I have this return from a SOAP webservice :
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:historyResponse xmlns:ns2="XXXXXXXXXX">
<return>
<userFullname>AGENT</userFullname>
<date>2018-08-01T17:24:20.948+02:00</date>
<stateName>Préparé</stateName>
</return>
<return>
<userFullname>PARAPHEUR</userFullname>
<date>2018-08-01T17:24:21.039+02:00</date>
<stateName>Envoyé pour signature</stateName>
</return>
<return>
<userFullname>Administrator</userFullname>
<date>2018-08-01T17:24:21.228+02:00</date>
<stateName>Signé</stateName>
</return>
<return>
<userFullname>PARAPHEUR</userFullname>
<date>2018-08-01T17:24:21.324+02:00</date>
<stateName>Classé</stateName>
</return>
</ns2:historyResponse>
</soap:Body>
</soap:Envelope>
When I consume this webservice through PHP and CURL I just get a string like this (var dump) :
string(728) "<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:historyResponse xmlns:ns2="http://sei.ws.fast.cdc.com/"><return><userFullname>AGENT EDISSYUM</userFullname><date>2018-08-01T17:24:20.948+02:00</date><stateName>Préparé</stateName></return><return><userFullname>PARAPHEUR </userFullname><date>2018-08-01T17:24:21.039+02:00</date><stateName>Envoyé pour signature</stateName></return><return><userFullname>Administrator </userFullname><date>2018-08-01T17:24:21.228+02:00</date><stateName>Signé</stateName></return><return><userFullname>PARAPHEUR </userFullname><date>2018-08-01T17:24:21.324+02:00</date><stateName>Classé</stateName></return></ns2:historyResponse></soap:Body></soap:Envelope>"
How could I have from this string an array of "return" ?
Upvotes: 0
Views: 35
Reputation: 8950
You can use simplexml_load_string()
and json functions to convert it to an array. (note that you need to replace the colons as this function doesn't recognize xml with namespaces for some reason)
$response = '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:historyResponse xmlns:ns2="http://sei.ws.fast.cdc.com/"><return><userFullname>AGENT EDISSYUM</userFullname><date>2018-08-01T17:24:20.948+02:00</date><stateName>Préparé</stateName></return><return><userFullname>PARAPHEUR </userFullname><date>2018-08-01T17:24:21.039+02:00</date><stateName>Envoyé pour signature</stateName></return><return><userFullname>Administrator </userFullname><date>2018-08-01T17:24:21.228+02:00</date><stateName>Signé</stateName></return><return><userFullname>PARAPHEUR </userFullname><date>2018-08-01T17:24:21.324+02:00</date><stateName>Classé</stateName></return></ns2:historyResponse></soap:Body></soap:Envelope>';
//I'm not the author of this regex ;)
$xml = preg_replace("/(<\/?)(\w+):([^>]*>)/", "$1$2$3", $response);
$xml = simplexml_load_string($xml);
$json = json_encode($xml);
$responseArray = json_decode($json,true);
echo '<pre>';
print_r($responseArray);
Hope it helps!! Feel free to ask if you have any doubts :)
Upvotes: 1