在非对象上调用成员函数getElementsByTagName()

时间:2014-02-21 18:13:52

标签: php html dom

我一直在检查如何解决这个错误,但没有太多运气。我基本上有几个XML文件,可能有也可能没有特定的字段。我正在运行几个函数来检查这些字段并打印出信息。我的目标是,如果字段存在,则打印信息,否则跳过它并移动到下一条记录。

这是我运行的遍历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);
}

任何输入都会非常感激!

1 个答案:

答案 0 :(得分:1)

我认为问题在于这个比较:

if($ xml-> documentElement-> getElementsByTagName($ tagname)!= 0)

如果未找到任何内容,则getElements返回一个永不等于数字0的空数组,因此总是求值为true。尝试在getElementsBy ...

的结果上调用.length