SimpleXmlElement и XPath, получая пустой массив () - PullRequest
10 голосов
/ 26 октября 2010

У меня небольшие проблемы с анализом XML из ответа Google Checkout. XML приходит прямо с сервера Google, поэтому проблем с самим XML нет.

Я хочу заполучить все теги уведомлений о новых заказах

Я пытался это сделать, но каждый раз получал пустой массив ().

$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');

Фрагмент XML (только начало)

<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>

1 Ответ

19 голосов
/ 26 октября 2010

Вероятно, проблема связана с пространством имен по умолчанию.См.

Пример:

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

В качестве альтернативы, если нет других пространств имен, просто удалите пространство имен по умолчанию с помощью

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

перед передачей XML в SimpleXmlElement.

...