Comment analyser SOAP XML : suppression des préfixes d'espace de noms pour SimpleXML
Lors de l'analyse de documents XML SOAP, les préfixes d'espace de noms peuvent présenter des défis pour les bibliothèques comme simplexml . Ce problème survient lorsque vous rencontrez des réponses XML similaires à celles-ci :
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <PaymentNotification xmlns="http://apilistener.envoyservices.com"> <payment> <!-- Payment data --> </payment> </PaymentNotification> </soap:Body> </soap:Envelope>
Les tentatives d'analyse d'une telle chaîne XML à l'aide de simplexml, comme le code suivant, aboutissent souvent à des résultats vides :
$xml = simplexml_load_string($soap_response); $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); foreach ($xml->xpath('//payment') as $item) { print_r($item); }
Pour résoudre ce problème et analyser avec succès le XML SOAP avec les préfixes d'espace de noms, une approche simple mais efficace consiste à supprimer ces préfixes avant de transmettre le XML à simplexml. Voici comment procéder :
$your_xml_response = '<Your XML here>'; $clean_xml = str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $your_xml_response); $xml = simplexml_load_string($clean_xml);
En supprimant les préfixes d'espace de noms, le XML devient plus facile à analyser pour simplexml. L'objet SimpleXMLElement résultant contiendrait les données souhaitées imbriquées sous
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!