我编写了一个打开HTML文件的函数,删除了某个类的div的内容并保存了该文件。我在三个不同的位置创建了3个测试文件。我的功能在site.html和site3.html上运行良好,但在site2.html
上运行不正常文件夹结构如下:
/testing/script.php //包含我的功能
文件的HTML是相同的
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="string">Content of site2.html</div>
<div id="well">not here</div>
<div id="empty"></div>
<div>foo</div>
</body>
</html>
这是我的script.php
<?php
$urls = array(
"site.html",
"/folder1/site2.html",
"../folder2/site3.html"
); // get the urls of the files
function DeleteContent () {
global $urls;
echo "DeleteContent is running";
if (is_array($urls) || is_object($urls)) {
foreach($urls as $url) {
$dom = new DOMDocument;
$dom->loadHTMLFile($url);
$xpath = new DOMXPath($dom);
$pDivs = $xpath->query(".//div[@class='string']");
foreach ( $pDivs as $div ) {
$div->removeChild($div->firstChild);
}
$dom->saveHTMLFile($url);
}
}
}
DeleteContent();
?>
我收到此错误
捕获致命错误:传递给DOMNode :: removeChild()的参数1必须是DOMNode的一个实例,null给定,在第57行的/testing/script.php中调用,在第29行的/testing/script.php中定义
//原始文件中的第29行(根据问题进行了调整)
foreach ( $pDivs as $div ) {
$div->removeChild($div->firstChild); // line 29
}
答案 0 :(得分:1)
我想那个
<div id="empty"></div>
导致您的“null-Exception”。内部无需删除。
答案 1 :(得分:1)
我所能建议的是在删除它之前测试firstChild,因为你的代码看起来很好。
foreach ( $pDivs as $div )
{
if( $div->firstChild )
{
$div->removeChild( $div->firstChild );
}
}