Эй, подумайте, что у меня есть синтаксис html follwing
<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; } ?>
Но я получаю пустой результат. Здесь я здесь.
Чтобы подавить ошибки синтаксического анализа, не используйте
@$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;
Во-первых, дело имеет значение:
$dom->getElementsByTagName('P');
Должно быть:
$dom->getElementsByTagName('p');
Во-вторых, innerHTML
не является допустимым свойством DOMElement.
Пытаться:
echo $dom->textContent; echo $dom->nodeValue;
Однако это не вернет внутренние HTML-теги и разделит их. Есть несколько примеров того, как заставить его работать в руководстве по PHP .