提取特定 div 的内容,仅保留某些元素

Extract content of specific div preserving only certain elements

我只需要提取网页的文本部分,只保留 <p> <h2>, <h3>, <h4> and <blockquote>s

现在,使用 DOMXPath 和 $div = $xpath->query('//div[@class="story-inner"]'); 在文本 div.

另一方面,使用以下代码:

$items = $doc->getElementsByTagName('<p>');
 for ($i = 0; $i < $items->length; $i++) {
    echo $items->item($i)->nodeValue . "<p>";
}

给出了非常漂亮和干净的结果,非常接近我想要的,但是缺少 <h2>, <h3>, <h4> and <blockquotes>

我想知道是否有任何 DOM-方式 (1) 仅指示所需的页面元素并提取干净的结果或 (2) 清理使用 $div = $xpath->query('//div[@class="story-inner"]'); 获得的输出的有效方式?

如果我没有正确理解你的问题..这是你要的吗...

$output1=preg_match('/^.*<tagName>(.*)<\/tagName>/', $value,$match1);

匹配标记名并使用 preg_match...

获取它们之间的数据

在这种情况下,您可以在 xpath 查询中使用 OR。只需将这些标签与其级联即可获得那些唯一需要的标签。

$url = "http://www.example.com/russian/international/2015/02/150218_ukraine_debaltseve_fighting";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$html = curl_exec($curl);
curl_close($curl);

$doc = new DOMDocument();
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");
@$doc->loadHTML($html);

$xpath = new DOMXPath($doc);

$tags = array('p', 'h2');
$children_needed = implode(' or ', array_map(function($tag){ return sprintf('name()="%s"', $tag); }, $tags));
$query = "//div[@class='story-body__inner']//*[$children_needed]";
$div_children = $xpath->query($query);
if($div_children->length > 0) {
    foreach($div_children as $child) {
        echo $doc->saveHTML($child);
    }
}