我一直在检查如何解决这个错误,但没有太多运气。我基本上有几个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);
}
任何输入都会非常感激!
答案 0 :(得分:1)
我认为问题在于这个比较:
if($ xml-> documentElement-> getElementsByTagName($ tagname)!= 0)
如果未找到任何内容,则getElements返回一个永不等于数字0的空数组,因此总是求值为true。尝试在getElementsBy ...
的结果上调用.length