2014-02-21 2 views
0

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

Вот функция я работает, что проходит через XML:

function pull_xml($id, $gettag = false, $tagname = 'field', $checkatt = array(), $attname = false, $gettextnode = false) { 
    $xml = new DOMDocument(); 
    $xml->loadXML(PRIVATE_DIR. "jobs/$id/job.xml"); 
    try { 
     if ($xml) { 
      if (!$gettag) 
       return $xml; 
      $tags = ''; 
      $makecsv = true; 
      echo $tagname; 
      if ($xml->documentElement->getElementsByTagName($tagname)!= 0) { 
       $tags = $xml->documentElement->getElementsByTagName($tagname); 
       foreach ($tags as $tag) { 
        if ($checkatt) { 
         if (!$tag->getAttribute($checkatt[0]) || (string)$tag->getAttribute($checkatt[0])!= $checkatt[1]) { 
          continue; 
         } 
        } 
        if ($attname) { 
         foreach ($tag->attributes as $k => $v) { 
          if ((string)$k == $attname) 
           return (string)$v; 
         } 
        } 
        else if ($gettextnode) { 
         return $tag->textContent; 
        } 
       } 
      } 
      else 
       $makecsv = false; 
     } 
     else 
      $makecsv = false; 
     if (!$makecsv) 
      return '--'; 
    } catch (Exception $e) { 
     echo $e->getMessage(); 
    } 
} 

Вот пример того, как я называю эту функцию:

foreach ($jobs as $job) { 

    $id = (string)$job['job_id']; 
    $total = (float)pull_xml($id, true, 'field', array(
      'id', 
      'app_dv'), 'value', false); 
    $job_totals[$id] = $total; 
    $overall_total += $total; 

    $casenum = pull_xml($id, true, 'field', array(
      'label', 
      'Case Number'), 'value', false); 
    $lease_end = pull_xml($id, true, 'field', array(
      'id', 
      'lease_end'), 'value', false); 
    $date_range = pull_xml($id, true, 'field', array(
      'label', 
      'Tax Year'), 'value', false); 

    $detail_csv[] = array(
      $comp, 
      $casenum, 
      $total, 
      $lease_end, 
      $date_range); 
} 

Любой Input вообще было бы весьма признателен !

+2

Попробуйте удалить часть '-> documentElement', просто' $ xml-> getElem ... ' –

+1

' $ xml-> documentElement' не является объектом. – h2ooooooo

ответ

1

Я думаю, что проблема это сравнение:

если ($ xml-> documentElement-> getElementsByTagName ($ тэгом) = 0!)

Если ничего не найдено, getElements возвращает пустой массив, который никогда не равное числу 0, поэтому это всегда оценивается как true. Попробуйте вызвать .length в результате getElementsBy ...

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