Текст из тега <p>с использованием DOM Php - PullRequest
2 голосов
/ 11 февраля 2011

Эй, Считайте, что у меня есть следующий синтаксис html

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

Я хочу получить текст (xyz и abc), используя DOM.

Это мой код.

<?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;
}
?>

Но я получаю пустой результат. что я тут не понимаю ??1009*

Ответы [ 2 ]

8 голосов
/ 11 февраля 2011

Для подавления ошибок синтаксического анализа, не используйте

@$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 голос
/ 11 февраля 2011

Во-первых, значение имеет значение:

$dom->getElementsByTagName('P');

Должно быть:

$dom->getElementsByTagName('p');

Во-вторых, innerHTML не является допустимым свойством DOMElement.

Попробуйте:

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

Однако это не вернет внутренние HTML-теги и удалит их.В руководстве по PHP .

есть несколько примеров того, как заставить его работать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...