I have this ugly XML which has alot of namespaces on it, when I try to load it with simpleXML if i indicate the first namespace I'd get an xml object ,but following tags with other namespaces would not make it to the object. Here is the SOAP response
<?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns8502="http://tempuri.org"> <SOAP-ENV:Header> <Interface PartnerID="FastBooking" PartnerType="Test" Version="1.0.0" /> <Credentials HotelID="AC00006" User="User" Password="123456" /> <Client Ref ="123456789" TimeStamp="2012-12-14T12:24:25+0100"/> </SOAP-ENV:Header> <SOAP-ENV:Body> <ServiceNameRQ xmlns="urn:wsTest"> <GetRatesRS> <Rates> <Rate RateID="12984" FromDate="2010-05-12" ToDate="2010-06-30" RateType="PUBLIC" RateCode="RAC" MinRate="100" MaxRate="1000" Currency="EUR" ReadOnly="No" FromRateID="11456"> <RateName>Rack Rate</RateName> </Rate> <Rate RateID="13219" FromDate="2010-07-12" ToDate="2010-12-31" RateType="PUBLIC" RateCode="NORMAL" MinRate="100" MaxRate="1000" Currency="EUR" ReadOnly="Yes"> <RateName>Normal Rate</RateName> <R1 Name="Single Occupancy" MinRate="90.00" MaxRate="1500.00" /> <R2 Name="Double Occupancy" MinRate="120.00" MaxRate="2000.00" /> <R3 Name="2 Nights" MinRate="150.00" MaxRate="2000.00" /> </Rate> </Rates> </GetRatesRS> </ServiceNameRQ> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Here is the PHP code I'm using:
$result = $xml_query; $result = stripslashes($result); $result = simplexml_load_string($result); $namespacesMeta = $result->getNamespaces(true); $mediaXML = $result->children($namespacesMeta['SOAP-ENV:Header']); $Interface = $mediaXML->xpath('//Interface'); $Credentials = $mediaXML->xpath('//Credentials'); $Client = $mediaXML->xpath('//Client'); $attributesInterface = $Interface[0]['@attributes']; $PartnerID = $attributesInterface['PartnerID']; $PartnerType = $attributesInterface['PartnerType']; $Version = $attributesInterface['Version']; $attributesCredentials = $Credentials[0]['@attributes']; $HotelID = $attributesCredentials['HotelID']; $User = $attributesCredentials['User']; $Password = $attributesCredentials['Password']; $HotelID = filter_var($HotelID, FILTER_SANITIZE_MAGIC_QUOTES); $User = filter_var($User, FILTER_SANITIZE_MAGIC_QUOTES); $Password = filter_var($Password, FILTER_SANITIZE_MAGIC_QUOTES); $Password = tchag3iba($Password); But I can not retrieve the contents of SOAP-ENV:Body (GetRatesRS -> Rates -> Rate)
stripslasheson the XML response?SimpleXMLElement::children(), see Example #2 Using namespaces.