使用 PHP DOMDocument 从元素中获取所有内容
Get all the content from an element using PHP DOMDocument
我有以下 HTML 结构,我试图从中提取第一个 h2 和第一段:
<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse facilisis nisl nec varius venenatis.</h2>
<p>Praesent at ante vel metus condimentum pharetra quis bibendum risus. Nam semper et massa eu fermentum. <a href="#"> Sed vehicula leo </a> vel quam dignissim consectetur.</p>
<p> Nam semper et massa eu fermentum. </p>
<p> .....
这是我使用 DOMDocument 的代码,它适用于上面 HTML 中的标题,但不适用于该段落 - 仅获取 link 之前的文本,我假设是有道理的,因为它可能是作为另一个节点创建的。我将如何更改下面的函数以使其获取所有第一段文本?
function getSnippet ($html) {
$doc = new DOMDocument();
$doc->loadHTML($html);
$headings = $doc->getElementsByTagName('h2');
$paragraphs = $doc->getElementsByTagName('p');
$snippet = '';
$firsth2 = $headings->item(0);
$snippet .= $firsth2->firstChild->nodeValue;
$firstp = $paragraphs->item(0);
$snippet .= $firstp->firstChild->nodeValue;
return $snippet;
}
您需要节点的文本内容:
$snippet .= $firstp->textContent;
PHP 文档:php.net DOMNode->textContent
你可以试试textContent:
$snippet .= $firstp->firstChild.textContent;
我有以下 HTML 结构,我试图从中提取第一个 h2 和第一段:
<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse facilisis nisl nec varius venenatis.</h2>
<p>Praesent at ante vel metus condimentum pharetra quis bibendum risus. Nam semper et massa eu fermentum. <a href="#"> Sed vehicula leo </a> vel quam dignissim consectetur.</p>
<p> Nam semper et massa eu fermentum. </p>
<p> .....
这是我使用 DOMDocument 的代码,它适用于上面 HTML 中的标题,但不适用于该段落 - 仅获取 link 之前的文本,我假设是有道理的,因为它可能是作为另一个节点创建的。我将如何更改下面的函数以使其获取所有第一段文本?
function getSnippet ($html) {
$doc = new DOMDocument();
$doc->loadHTML($html);
$headings = $doc->getElementsByTagName('h2');
$paragraphs = $doc->getElementsByTagName('p');
$snippet = '';
$firsth2 = $headings->item(0);
$snippet .= $firsth2->firstChild->nodeValue;
$firstp = $paragraphs->item(0);
$snippet .= $firstp->firstChild->nodeValue;
return $snippet;
}
您需要节点的文本内容:
$snippet .= $firstp->textContent;
PHP 文档:php.net DOMNode->textContent
你可以试试textContent:
$snippet .= $firstp->firstChild.textContent;