来自<p>标签的文本使用DOM Php </p>

时间:2011-02-11 16:16:17

标签: php dom

嘿 考虑我有以下的HTML语法

<p>xyz</p>
<p>abc</p>

我想使用DOM检索文本(xyz和abc)。

这是我的代码。

<?php
$link='http://www.xyz.com';
$ret= getLinks($link);
print_r ($ret);

function getLinks($link)
{
    /*** return array ***/
    $ret = array();

    /*** a new dom object ***/
    $dom = new domDocument;

    /*** get the HTML (suppress errors) ***/
    @$dom->loadHTML(file_get_contents($link));

    /*** remove silly white space ***/
    $dom->preserveWhiteSpace = false;

    /*** get the links from the HTML ***/
    $text = $dom->getElementsByTagName('p');

/*** loop over the links ***/
    foreach ($text as $tag)
    {
        $ret[] = $tag->innerHTML;
    }

    return $ret;
}
?>

但我得到一个空洞的结果。我在这里呀呀。?

2 个答案:

答案 0 :(得分:8)

要抑制解析错误,请使用

@$dom->loadHTML(file_get_contents($link));

libxml_use_internal_errors(TRUE);

此外,没有理由使用file_get_contents。 DOM可以从远程资源加载。

libxml_use_internal_errors(TRUE);
$dom->loadHTMLFile($link);
libxml_clear_errors();

此外,标记名称区分大小写。当代码段包含<P>时,您正在查询<p>。改为

$text = $dom->getElementsByTagName('p');

最后,没有innerHTML。用于获取它的用户态解决方案在

您可以使用

获取outerHTML
$ret[] = $dom->saveHtml($tag); // requires PHP 5.3.6+

$ret[] = $dom->saveXml($tag); // that will make it XML compliant though

要获取P标签的文本内容,请使用

$ret[] = $tag->nodeValue;

答案 1 :(得分:1)

首先,案件很重要:

$dom->getElementsByTagName('P');

应该是:

$dom->getElementsByTagName('p');

其次,innerHTML不是有效的DOMElement属性。

尝试:

echo $dom->textContent;
echo $dom->nodeValue;

但是,这不会返回内部HTML标记并将它们剥离。有few examples on how to make it work in the PHP manual