2012-04-19 4 views
0

Мне нужно выполнить цикл через items в виде массива внутри объекта SimpleXMLElement ниже, но не может получить доступ к нему, используя $order->order->order->items. Я могу получить доступ к адресам доставки и выставления счетов, используя тот же формат, т.е. $order->order->order->delivery_address и, как ожидается, так же попадает в массив элементов. Тем не менее, я получаю пустой SimpleXMLElement объект, когда я print_r($order->order->order->items)Доступ к части объекта SimpleXMLElement - PHP

SimpleXMLElement Object 
(
    [order] => SimpleXMLElement Object 
     (
      [id] => 860268 
      [shopkeeper_orderno] => 1001 
      [customer] => 797476 
      [creationdate] => Apr 19 2012 10:36:38:100AM 
      [reference] => k2koju45rmaqfl45n20xbkmq 
      [net] => 1500 
      [vat] => 17.5 
      [status] => 0 
      [isnew] => 1 
      [deductions] => 0 
      [postage] => 1 
      [paymentmethod] => PayPal    
      [instructions] => SimpleXMLElement Object 
       (
       ) 

      [errors] => SimpleXMLElement Object 
       (
       ) 

      [kashflow_synch] => 0 
      [order] => Array 
       (
        [0] => SimpleXMLElement Object 
         (
          [billing_address] => SimpleXMLElement Object 
           (
            [0] => 

           ) 

         ) 

        [1] => SimpleXMLElement Object 
         (
          [delivery_address] => SimpleXMLElement Object 
           (
            [0] => 

           ) 

         ) 

        [2] => SimpleXMLElement Object 
         (
          [items] => Array 
           (
            [0] => SimpleXMLElement Object 
             (
              [id] => 1285158 
              [headerID] => 860268 
              [productID] => 4867690 
              [description] => TEST ORDERING PF NODES - Special Offer Price 
              [net] => 1400 
              [vat] => 0 
              [qty] => 1 
              [formID] => -1 
             ) 

            [1] => SimpleXMLElement Object 
             (
              [id] => 1285159 
              [headerID] => 860268 
              [productID] => 4959678 
              [description] => Wedding dress 
              [net] => 100 
              [vat] => 17.5 
              [qty] => 1 
              [formID] => -1 
             ) 

           ) 

         ) 

       ) 

      [postage_tax] => 0 
      [dispatched] => 0 
      [paybyotherid] => -1 
      [ip] => 81.168.43.121 
      [wheredidyouhearid] => -1 
     ) 

) 

ответ

0

Использование Dan Lees предложение Я попытался SimpleXmlElement :: детей() и сделал ниже, который работает

foreach ($order->children() as $order) { 
     foreach ($order->children() as $order_details) { 
      foreach ($order_details->children() as $order_items) { 
       echo $order_items->id; 
      } 
     } 
    } 
1

EDIT: Я только что видел, как вы сделали ошибку с именованием, родитель должен быть вызван <orders> и подпункты <order>


Элемент SimpleXMLElement кажется пустым, на самом деле он обычно заполняется, но не отображается при демпинге (кто бы ни думал об этом сумасшедшем поведении)

Можете ли вы попробовать это?

foreach($order->orders->order as $order) { // should be orders then 
    echo $item->getName(); 
} 

Или попробовать с SimpleXMLElement::children()

+0

Я не могу изменить XML, так что родительский порядки. Мне нужно работать с тем, что у меня есть. Вышеприведенное дает мне «Недопустимый аргумент, предоставленный для foreach()» error – LeeTee

0

Вы можете использовать цикл, как показано ниже, то все, что вам нужно сделать, это $ изделия-> идентификатор

foreach($order->children()->children()->items as $items) 
     { 

     } 
+0

Пробовал это и не работает. – LeeTee

1

ваши детали на самом деле на второе смещение массива порядка.

Я бы просто использовал xPath для их обработки.

foreach($xmlObject->xpath('/order/order[2]/items') as $item) 
{ 
    // Do something with my $item 
} 
+0

У меня нет прямого доступа к XML, для этого есть только что выше. – LeeTee

Смежные вопросы