Подскажите как брать ошибку!? PHP warning: Invalid argument supplied for foreach()

Добрый вечер!

Пытаюсь спарсить XML фаил с помощью catalogfill вроде в логах показывает массив но не добавляет их в TV:

[0] => Array
(
[] => Array
(
[0] => true
[1] => opt.globusceramica.ru/catalog/grespania/alabaster/13/
[2] => 3790
[3] => RUR
[4] => 96
[5] => 45x120
[6] => Глянцевая
[7] => Мрамор
[8] => Бежевый
[9] => 45
[10] => м2
[11] => 5830
)

[tv1] => opt.globusceramica.ru/upload/iblock/cd3/1ntxgpep3rui5c6xajqg8f14clrrltqw.jpg
[pagetitle] => ALABASTER ALABASTER BEIGE 45х120
)

Кусок из XML фаила именно параметры с названием не хочет
<param name="Размер"45x120</param>
Кусок из XML
<offer id="14" available="true">
     <currencyId>RUR</currencyId>
     <categoryId>96</categoryId>
     <picture>http://opt.globusceramica.ru/upload/iblock/ef2/c26wewu3mp4gqubj539u1n5i7s304o4u.jpg</picture>
     <name>ALABASTER ALABASTER TEBAS 45х120</name>
     <param name="Размер">45x120</param>
     <param name="Поверхность">Глянцевая</param>
     <param name="Рисунок">Мрамор</param>
     <param name="Color">Бежевый</param>
     <param name="РРЦ">9999</param>
 </offer>

Ошибку выдает в этом месте foreach($node as $k => $v) {:

* Переводит XML объект в массив, сохраняет значения и их xpath
     * 
     */
    public function parceXML($xmlObject, $out=array(), $level=0){
        
        //foreach($xmlObject->attributes() as $a => $b) {
        //    echo $a,'="',$b,"\"\n";
        //}
        
        foreach ((array) $xmlObject as $key => $node){
            
            //Атрибуты элемента
            if($key=='@attributes'){
                foreach($node as $k => $v) {
                    $this->keys[1][] = '@attributes.'.$k;
                    $this->values[] = trim($v);
                }
                continue;
            }
            
            if(is_object($node) || is_array($node)){
                
                //var_dump(count($this->keys[0]),$level,$key,implode('/',$this->keys[0]));
                //var_dump(implode('/',$this->keys[0])); echo "\n\n";
                
                //убираем с конца массива ключей значения, которые не соответствуют текущему уровню вложенности
                if(/*$level > 0 && */count($this->keys[0]) > $level){
                    $this->keys[0] = $this->array_mpop($this->keys[0],(count($this->keys[0]) - $level));
                }else{
                    $level = count($this->keys[0]);
                }
                if(!is_numeric($key)) $this->keys[0][] = trim($key);
                
                $out[$key] = $this->parceXML($node,$out,$level+1);
                
            }else{
                $this->keys[1][] = implode('/',array_merge($this->keys[0],array($key)));
                $this->values[] = trim($node);
                $out[$key] = trim($node);
            }
        }
        
        return $out;
    }
Подскажите где исправить!?
Дмитрий
04 сентября 2023, 18:47
modx.pro
704
0

Комментарии: 5

Артур Шевченко
04 сентября 2023, 21:13
0
В описании ошибки должна быть ссылка на файл и сроку в нём.
    Дмитрий
    04 сентября 2023, 21:18
    0
    Ошибка как раз показывает на фаил и в нем строка 1668 ошибка
    //Атрибуты элемента
                if($key=='@attributes'){
                    foreach($node as $k => $v) {
                        $this->keys[1][] = '@attributes.'.$k;
                        $this->values[] = trim($v);
      Артур Шевченко
      04 сентября 2023, 21:24
      0
      if($key=='@attributes' && is_array($node)){
                      foreach($node as $k => $v) {
                          $this->keys[1][] = '@attributes.'.$k;
                          $this->values[] = trim($v);
        Дмитрий
        04 сентября 2023, 21:55
        0
        Ошибка вроде ушла… все равно параметры не парсит ((
          Артур Шевченко
          04 сентября 2023, 23:10
          0
          Так а с чего бы он их начал парсить, если их нет или они в неподходящем для парсинга формате? У вас и ошибки не было, было предупреждение, что вы передаёте в функцию foreach не массив. Я показал как сделать проверку, чтобы предупреждение ушло, но цикл-то от этого не запустился. Надо разбираться что лежит в $node и исходя из этого корректировать код.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5