使用简单HTML DOM解析器返回除*图像之外的所有元素*

时间:2015-10-28 10:01:41

标签: php wordpress simple-html-dom

我试图使用Simple HTML DOM Parser来查看我的WordPress帖子的内容,并将所有图片移到帖子的末尾,无论它们在实际的html中的位置。

我使用以下方法成功隔离了所有图像:

$html = str_get_html(wpautop(get_the_content()));
foreach($html->find('img') as $element) echo $element->src . '<br>';

根据文档。 (这只是根据网站上给出的示例打印图像源,因为我还在尝试)。

但是,我无法弄清楚如何找到图像之外的所有元素 - documentation具有查找没有属性的元素的选项,但这并不是似乎适用。

我可以像这样选择多个元素:

$ret = $html->find('a, p'); 

...但是我要么必须猜测要使用哪些标签,要么包含不是img的每个标签,这将是一个巨大且不可靠的列表。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

使用PHP的DOM classes,你可以这样做:

$doc = new \DOMDocument();
@$doc->loadHTML(get_the_content());

$xpath = new \DOMXPath($doc);

foreach ($xpath->query('//*[name() != "img"]') as $node) {
    // do stuff here
}

答案 1 :(得分:-1)

由于我想将图像与内容的主体分开,最简单的方法是将它们放入一个数组中,然后在撤回之前将它们从DOM中删除(as suggested here),如下所示: / p>

$html = str_get_html(wpautop(get_the_content()));

$images = array();

foreach($html->find('img') as $element) :
    $images[] = $element->src; // Puts the image source into an array
    $element->outertext = ''; // and then removes it from the DOM.
endforeach;

echo $html;

print_r($images);

这只返回没有图像的帖子的内容,然后显示图像数组,然后我可以运行foreach来显示。