tags:

views:

24

answers:

1

I am having a little trouble with parsing XML from a google checkout response. The XML is coming straight from the google server so there is no problem with the XML itself.

I want to get hold of all the new-order-notification tags

I tried this but get an empty array() returned everytime.

$xml = new SimpleXmlElement($raw_xml);
$notifications = $xml->xpath('notifications');
$notifications = $xml->xpath('/notification-history-response/notifications/new-order-notification');
$notifications = $xml->xpath('//new-order-notification');

An XML snipet (Just the beginning)

<notification-history-response xmlns="http://checkout.google.com/schema/2" serial-number="c5cda190-0eb1-4f91-87cd-e656e5598d38">
  <notifications>
    <new-order-notification serial-number="271578974677716-00001-7">
      <buyer-billing-address>
        <address1>19 sandbox st</address1>
        <address2></address2>
+3  A: 

The issue is likely the default namespace. See

Example:

$sxe->registerXPathNamespace('x', 'http://checkout.google.com/schema/2');
$result = $sxe->xpath('//x:notifications');

As an alternative if there is no other namespaces, simply remove the default namespace with

str_replace('xmlns="http://checkout.google.com/schema/2"', '', $raw_xml);

before feeding the XML to your SimpleXmlElement.

Gordon
+1 good explanation and practical example. Folks, please do take the time to understand namespaces. They're not that hard, and it really is easier in the long run to understand them than to be continually trying to dodge them.
LarsH