Я много раз проверял, как обойти эту ошибку, но не повезло. Я в основном имею пару 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 вообще было бы весьма признателен !
Попробуйте удалить часть '-> documentElement', просто' $ xml-> getElem ... ' –
' $ xml-> documentElement' не является объектом. – h2ooooooo