PHP DOMDocument和getElementsByTagName问题?

时间:2014-12-02 04:41:11

标签: php html domdocument

我正在尝试从HTML字符串中读取h1值,如下所示

<h1>
<a href="http://example.com/?p=5016"> love me for a reason </a>
</h1>

我正在使用以下代码,但这会返回标题的空值,但内容似乎正常(下一行)?为什么

libxml_use_internal_errors(true);
$dom_document = new DOMDocument(); // CREATE A NEW DOCUMENT
$dom_document->loadHTML(mb_convert_encoding($row['html'], 'HTML-ENTITIES', 'UTF-8')); // LOAD THE STRING INTO THE DOCUMENT

$article_titles=$dom_document->getElementsByTagName("h1");
$title = $article_titles->textContent;


//this works fine 
$article_contents=$dom_document->getElementByID("article-single");
$content=$article_contents->textContent;
libxml_use_internal_errors(false);

1 个答案:

答案 0 :(得分:2)

标题内容为空,因为$article_titles仍为DOMNodeList。由于您通过标记名称获取元素,因此您希望这将返回一个或多个元素,而不是通过 id 获取元素,您只需要一个因为它们是应该是独一无二的。

您必须定位DOMElement才能获得->textContent值。您可以通过链接->item(index_num)

来访问它
$article_titles = $dom_document->getElementsByTagName("h1"); // DOMNodeList
$title = $article_titles->item(0)->textContent;
                       //  ^ point to the first item found, it starts at zero
echo $title;

如果您想使用foreach

foreach($dom_document->getElementsByTagName("h1") as $title) {
    echo $title->textContent . '<br/>';
}