Vlad Six
Знаток
(354)
2 года назад
Для того чтобы получить содержимое элемента <yandex:full-text>, можно воспользоваться функцией simplexml_load_string и передать в нее содержимое этого элемента в виде строки. Например:
php
Copy code
$xml = simplexml_load_file($url, "SimpleXMLElement", LIBXML_NOCDATA);
foreach ($xml->channel->item as $item) {
// Получаем содержимое элемента yandex:full-text в виде строки
$full_text_str = (string)$item->{'yandex:full-text'};
// Загружаем содержимое строки в SimpleXML
$full_text = simplexml_load_string($full_text_str);
// Получаем нужные данные из $full_text
// ...
}
После этого можно обращаться к элементам $full_text как обычно. Например:
less
Copy code
echo $full_text->div->p; // Выведет первый параграф из элемента yandex:full-text
Обратите внимание, что элементы внутри <yandex:full-text> будут иметь другой пространство имен, чем элементы в основном XML-документе. Поэтому для доступа к элементам внутри <yandex:full-text> нужно использовать оператор -> вместо ->children().
ICaR SoftГуру (3340)
2 года назад
Огромное!!! Благодарное СПАСИБО ВАМ!!!!
(string)$item->{'yandex:full-text'} - ведь просто, но я не смог сообразить!
Всё заработало!
Имею теперь почти читаемый массив:
[19] => SimpleXMLElement Object
(
[title] => В Канске вернувшийся из мест заключения отец устроил своим детям урок "воспитания"
[pubDate] => Wed, 01 Mar 2023 14:22:36 +0700
[category] => Канск
[yandex:full-text] => В Канске у неоднократно судимого местного жителя изъяты дети....<br>
)
————
Читаемый по всем ячейкам, кроме "[yandex:full-text]".
Данная "!CDATA" раскрылась. Но я так и не смог вытащить данные из [yandex:full-text]. Старый код работающий без CDATA c яндекс-тегом yandex:full-text, тоже не смог - "$full_text=$item->children('yandex',true);"
У кого есть хороший опыт парсинга - поделитесь идеей.