foreach ($filePaths as $filePath) {
/*Open a file, run a function to write a new file
that rewrites the information to meet design specifications */
$fileHandle = fopen($filePath, "r+");
$newHandle = new DOMDocument();
$newHandle->loadHTMLFile( $filePath );
$metaTitle = trim(retrieveTitleText($newHandle));
$pageMeta = array('metaTitle' => $metaTitle, 'pageTitle' => 'Principles of Biology' );
$attributes = retrieveBodyAttributes($filePath);
cleanfile($fileHandle, $filePath);
fclose($fileHandle);
}
function retrieveBodyAttributes($filePath) {
$dom = new DOMDocument;
$dom->loadHTMLFile($filePath);
$p = $dom->getElementsByTagName('body')->item(0);
/*if (!$p->hasAttribute('body')) {
$bodyAttr[] = array('attr'=>" ", 'value'=>" ");
return $bodyAttr;
}*/
if ($p->hasAttributes()) {
foreach ($p->attributes as $attr) {
$name = $attr->nodeName;
$value = $attr->nodeValue;
$bodyAttr[] = array('attr'=>$name, 'value'=>$value);
}
return $bodyAttr;
}
}
$ filePaths是一个字符串数组。当我运行代码时,它为我调用hasAttributes的行给出了“对非对象的成员函数hasAttributes()的调用”错误。当它没有被注释掉时,我在调用hasAttribute('body')的行上得到了相同的错误。我在调用getElementsByTagName之后就在$ p上尝试了一个var_dump,我得到了“object(DOMElement)[5]”。好吧,数字改变了,因为我一次在多个文件上运行代码,但我不知道这个数字是什么意思。我找不到我做错了什么。
答案 0 :(得分:1)
使用:
$p = $dom->getElementsByTagName('body')->item(0);
您正在执行:DOMNodelist::item
(请参阅:http://www.php.net/manual/en/domnodelist.item.php)如果在给定索引处找不到任何元素,则返回 NULL 。
但是你没有检查这种可能性,你只是期望$p
不为空。
尝试添加以下内容:
if ($p instanceof DOMNode) {
// the hasAttributes code
}
虽然,如果您确定应该有一个body元素,那么您可能需要检查文件路径。
答案 1 :(得分:1)
应该是因为DOM文档中没有<body>
标记。