Я пытаюсь получить содержимое внутри div, называемое item-page. Html происходит из сеанса curl и содержится в переменной $ html. Я использую getElementsByTagName, но он работает только с ‘div’ в качестве значения в (), если я поставлю ‘p’, это не сработает. Кто-нибудь знает почему?
Вот код:
$dom = new DOMDocument;
$dom->loadHTML($html);
$div = $dom->getElementsByTagName('p');
foreach ($div as $tag) {
if ($tag->getAttribute('class') === 'item-page') {
echo $tag->nodeValue."<br>";
}
}
Вот HTML-источник (один абзац, который я должен повторить) с сайта:
<div class="item-page">
<p> Chiusura dell'Istituto per giovedì 8 dicembre 2016 </p>
</div>
(Причина, по которой я использую ‘p’, заключается в том, что я могу начать новую строку для каждого абзаца, если я использую ‘div’, он отображается как один блок).
Это не работает, потому что элемент ‘p’ на вашей странице не имеет класса ‘item-page’, как ожидается в вашем коде. Если вы удалите это заявление if, оно будет работать так, как вы ожидаете.
если он работает с ‘div’, но не с ‘p’, это означает, что $ html не содержит p элементов с классом item-page
Я запустил этот код:
<?php
$html = "<div class=\"item-page\">
<p> Chiusura dell'Istituto per giovedì 8 dicembre 2016 </p>
</div>";
$dom = new DOMDocument;
$dom->loadHTML($html);
$div = $dom->getElementsByTagName('p');
var_dump($div[0]);
die();
foreach ($div as $tag) {
if ($tag->getAttribute('class') === 'item-page') {
echo $tag->nodeValue."<br>";
}
}
и я получаю ответ, который я ожидаю:
object(DOMElement) #3 (18) { ["tagName"]= > string(1)
"p" ["schemaTypeInfo"] => NULL["nodeName"] => string(1)
"p" ["nodeValue"] => string(53)
" Chiusura dell'Istituto per giovedì 8 dicembre 2016 " ["nodeType"] => int(1)["parentNode"] => string(22)
"(object value omitted)" ["childNodes"] => string(22)
"(object value omitted)" ["firstChild"] => string(22)
"(object value omitted)" ["lastChild"] => string(22)
"(object value omitted)" ["previousSibling"] => string(22)
"(object value omitted)" ["nextSibling"] => string(22)
"(object value omitted)" ["attributes"] => string(22)
"(object value omitted)" ["ownerDocument"] => string(22)
"(object value omitted)" ["namespaceURI"] => NULL["prefix"] => string(0)
"" ["localName"] => string(1)
"p" ["baseURI"] => NULL["textContent"] => string(53)
" Chiusura dell'Istituto per giovedì 8 dicembre 2016 "}
Обратите внимание, что согласно документации getElementByTagName возвращает список
Удалить p
от $dom->getElementsByTagName()
и добавить div
так что ваш результат показывает все div на странице.
<?php
$html = <<<EOT
<html>
<head></head>
<body>
<div class="item-page">
<p> Chiusura dell'Istituto per giovedì 8 dicembre 2016 </p>
</div>
</body>
</html>
EOT;
$dom = new DOMDocument;
$dom->loadHTML($html);
$div = $dom->getElementsByTagName('div');
foreach ($div as $tag) {
if ($tag->getAttribute('class') === 'item-page') {
echo $tag->nodeValue."<br>";
}
}
Выход
Chiusura dell'Istituto per giovedì 8 dicembre 2016