Search code examples
phpsimplexml

simplexml_load_string not creating an object


My XML is:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <FindOrders xmlns="http://www.JOI.com/schemas/ViaSub.WMS/">
         <orders>
            <order>
               <MarkForName />
               <BatchOrderID />
               <CreationDate>2013-08-09T17:41:00</CreationDate>
               <EarliestShipDate />
               <ShipCancelDate />
               <PickupDate />
               <Carrier>USPS</Carrier>
               <BillingCode>Prepaid</BillingCode>
               <TotWeight>0.00</TotWeight>
               <TotCuFt>0.00</TotCuFt>
               <TotPackages>1.0000</TotPackages>
               <TotOrdQty>1.0000</TotOrdQty>
               <TotLines>1.00</TotLines>
               <Notes />
               <OverAllocated />
               <PickTicketPrintDate />
               <ProcessDate />
               <TrackingNumber />
               <LoadNumber />
               <BillOfLading />
               <MasterBillOfLading />
               <ASNSentDate />
               <ConfirmASNSentDate />
               <RememberRowInfo>398879:12:2:::0:False</RememberRowInfo>
            </order>
         </orders>
      </FindOrders>
      <totalOrders xmlns="http://www.JOI.com/schemas/ViaSub.WMS/">1</totalOrders>
   </soap:Body>
</soap:Envelope>

When I do:

$a = simplexml_load_string($str);

print_r($a);

I get: SimpleXMLElement Object ( ) instead of an object with all of those parameters. Why is this?


Solution

  • You are missing the namespace declaration (php manual) for SOAP

    $a = simplexml_load_string($str);
    $a->registerXPathNamespace('soap', 'http://www.w3.org/2003/05/soap-envelope');
    
    $result = $a->xpath('//soap:Body');
    
    print_r($result);
    

    Result (preview)

    Array
    (
        [0] => SimpleXMLElement Object
            (
                [FindOrders] => SimpleXMLElement Object
                    (
                        [orders] => SimpleXMLElement Object
                            (
                                [order] => SimpleXMLElement Object
      ...
      ...