PHP DOM检查img是否在div中

时间:2011-10-15 03:38:47

标签: php dom

我正在尝试在网站上进行一些动态CSS样式更新,并且需要使用PHP而不是JavaScript。我只需要设置包含div标记的img个标记,并忽略其余的div标记。

这是我到目前为止所做的:


    $dom = new domDocument;
    $dom->loadHTML($test);
    $dom->preserveWhiteSpace = false;

    $divs = $dom->getElementsByTagName('div');
    foreach ($divs as $div) {
        $saveXML[] = $dom->saveXML($div);
        $childNotes[] = $div->getChildNodes;
    }

我只想在这里尝试两种方法。 $saveXML选项的问题在于它给了我完整的代码包括封装div。我不想那样。此外,从现在开始,我将不得不在代码上运行正则表达式或其他内容,以查找其中是否包含img标记。

$childNodes选项应该是我想到的最好但是数组返回为空。这本来不错,因为我可以简单地试过像

这样的东西

    if ($childNode->nodeType == 'img'){
      $div->setAttribute('class', $new_attributes);
    }

(我认为最后一点完全没有,但这就是一般概念)..

以下是我需要搜索的HTML代码示例


    div class="image-left drop-shadow raised" style="width: 210px">
         img src="images/myimage.jpg" width="200" height="150" class="size-full" /
         p>EDIT THIS DIV's STYLE /p>
    /div>
    div class="blocktext" style="width: 150px;">
         p>DONT EDIT THIS DIVs STYLE /p>
    /div>

任何帮助请...

3 个答案:

答案 0 :(得分:0)

我希望您的示例HTML不是您使用的实际html。许多标签都没有打开/关闭“<”。

但是,如果不是,那么你可以使用:

$childNode->getElementsByTagName('img'); 

如果有一个图像,这将会返回,从阅读http://php.net/manual/en/domdocument.getelementsbytagname.php我得到它将返回一个列表...我可能是错的,但是把这个想法扔到那里。

答案 1 :(得分:0)

答案 2 :(得分:0)

您通常使用Xpath query

执行此操作
$xp = new DOMXPath($dom)
$divsContainingImg = $xp->query('//div/img/..');
foreach ($divsContainingImg as $div)
{
    /* @var $div DOMElement */
    ...
}

这将选择<{1}}元素的直接子元素的所有img元素,然后选择它的父元素(div元素)。