Проверьте, загружен ли xml с помощью simplexml_load_string - PullRequest
1 голос
/ 28 ноября 2011

Я запрашиваю xml-файл с помощью php следующим образом:

 public function trackOrderAction()
    {        
        $request = Mage::getResourceModel( 'order/request' );
        $request->setOrder($this->getRequest()->getParam('increment_id'));
        $response = $request->submit(true);
        $xml = simplexml_load_string($response);
        $items = count($xml->OrderItems->OrderItem);
     }

xml не готов сразу, поэтому, если люди пытаются использовать функцию до ее готовности, возникает ошибка, потому что она пытаетсяполучить свойство не-объекта.Мой вопрос заключается в том, как правильно проверить ответ XML, чтобы увидеть, есть ли что-нибудь и остановить функцию, если нет?

Я пробовал что-то простое, как

    if (empty($xml)){
      die();
    }  else {
              $items = count($xml->OrderItems->OrderItem);
            }

Но этоне помогает.Любые идеи о том, как проверить, загружен ли xml?

1 Ответ

1 голос
/ 28 ноября 2011

С http://us.php.net/manual/en/function.simplexml-load-string.php

Возвращает объект класса SimpleXMLElement со свойствами, содержащими данные, содержащиеся в документе xml.При ошибках он возвращает FALSE.

 public function trackOrderAction()
    {        
        $request = Mage::getResourceModel( 'order/request' );
        $request->setOrder($this->getRequest()->getParam('increment_id'));
        $response = $request->submit(true);
        $xml = simplexml_load_string($response);
        if ( !$xml ) {
            return false;
        }
        $items = count($xml->OrderItems->OrderItem);
     }

Он возвращает false, если произошла ошибка.Так что сразу потерпите неудачу, если simplexml_load_string потерпит неудачу, и верните false.В противном случае продолжите работу с остальной частью функции.Никогда die() в функции.

...