Трудности при работе с XML

anger

Новичок
При работе с XML возникли интересные трудности - XML файл успешно подхватывается, но из него ничего не выводится, прошу совета - что необходимо подкрутить в настройках, что-бы код отрабатывал верно.

PHP Version 5.0.4
Apache/2.0.55 (Win32)

К примеру, имеется следующий XML файл:
PHP:
<?xml version="1.0" encoding="UTF-8"?> 
 <objects count="3"> 
    <obj> 
       <name>line</name> 
       <color>red</color> 
    </obj> 
    <obj> 
       <name>cube</name> 
       <color>black</color> 
    </obj> 
    <obj> 
       <name>rectangle</name> 
       <color>green</color> 
    </obj>    
 </objects>
Его обрабатывает сл.код:
PHP:
<?php 
    // загружаем XML файл      
    if (file_exists('data.xml')) 
    { 
        $xmldoc = simplexml_load_file('data.xml'); 
        // отображаю структуру файла 
       echo '<pre>'; 
          var_dump($xmldoc); 
       echo '</pre>'; 
       echo '<hr>';       
    } else { 
        exit('Ошибка открытия data.xml:');} 
    //phpinfo();    
    for ($i=0; $i <= $xmldoc->attributes()->count-1; $i++) 
    {    
       echo '<font color="'.$xmldoc->obj[$i]->color.'">'.$xmldoc->obj[$i]->name.'</font><br>';    
    }    
 echo 'END';            
 ?>
В итоге получаю следующее:
PHP:
object(SimpleXMLElement)#1 (1) { 
   ["object"]=> 
   array(3) { 
     [0]=> 
     object(SimpleXMLElement)#2 (2) { 
       ["name"]=> 
       string(4) "line" 
       ["color"]=> 
       string(3) "red" 
     } 
     [1]=> 
     object(SimpleXMLElement)#3 (2) { 
       ["name"]=> 
       string(4) "cube" 
       ["color"]=> 
       string(5) "black" 
     } 
     [2]=> 
     object(SimpleXMLElement)#4 (2) { 
       ["name"]=> 
       string(9) "rectangle" 
       ["color"]=> 
       string(5) "green" 
     } 
   } 
 } 


 -------------------------------------------------------------------------------- 
 END
а должно выдать такое:
PHP:
object(SimpleXMLElement)#1 (1) { 
    ["object"]=> 
    array(3) { 
      [0]=> 
      object(SimpleXMLElement)#2 (2) { 
        ["name"]=> 
        string(4) "line" 
        ["color"]=> 
        string(3) "red" 
      } 
      [1]=> 
      object(SimpleXMLElement)#3 (2) { 
        ["name"]=> 
        string(4) "cube" 
        ["color"]=> 
        string(5) "black" 
      } 
      [2]=> 
      object(SimpleXMLElement)#4 (2) { 
        ["name"]=> 
        string(9) "rectangle" 
        ["color"]=> 
        string(5) "green" 
      } 
    } 
  } 


  -------------------------------------------------------------------------------- 
  line 
  cube 
  rectangle 

  END
 

Dovg

Продвинутый новичок
>В итоге получаю следующее:

Обманываешь ведь.
У тебя вывод var_dump не соответствует коду и приведенному xml файлу
 

anger

Новичок
не обманываю, покажи - где ты несоответствие увидел?
на данный момент выяснил что не срабатывает получение атрибута: $xmldoc->attributes()->count как это поправить?
 

Dovg

Продвинутый новичок
Код:
object(SimpleXMLElement)#1 (2) {
  ["@attributes"]=>
  array(1) {
    ["count"]=>
    string(1) "3"
  }
  ["obj"]=>
  array(3) {
    [0]=>
    object(SimpleXMLElement)#2 (2) {
      ["name"]=>
      string(4) "line"
      ["color"]=>
      string(3) "red"
    }
    [1]=>
    object(SimpleXMLElement)#3 (2) {
      ["name"]=>
      string(4) "cube"
      ["color"]=>
      string(5) "black"
    }
    [2]=>
    object(SimpleXMLElement)#4 (2) {
      ["name"]=>
      string(9) "rectangle"
      ["color"]=>
      string(5) "green"
    }
  }
}
У меня вот так вот выглядит var_dump. Найди 10 отличий.

оффтоп: версия php у тебя из музея, обновись.
 

anger

Новичок
обновится не могу - на этой версии крутится система сторонних разработчиков, приходится писать под то, что есть. На последней версии php действительно все замечательно работает. Что нужно сконфигурировать в моей версии php, что-бы все верно отрабатывало.
 

fixxxer

К.О.
Партнер клуба
Ничего нельзя сконфигурировать. Надо обновиться до 5.2.17, если "сторонние разработчики" не полные наркоманы - ничего не сломается.
 

anger

Новичок
пробую корректно обновиться, пока все печально =)
подскажите, как получить длину массива:
PHP:
object(SimpleXMLElement)#1 (1) {
  ["obj"]=>
  array(3)
тогда отпадет необходимость в атрибутах.
 
Сверху