Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Парсер на PHP c <Yandex:full-text> и <[!CDATA[много текста]]>

ICaR Soft Эксперт пока не указал должность 1 год назад
С помощью simplexml_load_file($url, "SimpleXMLElement", LIBXML_NOCDATA) добился следующего:
Имею теперь почти читаемый массив:
[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);"
У кого есть хороший опыт парсинга - поделитесь идеей.

Лучший ответ
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'} - ведь просто, но я не смог сообразить!
Всё заработало!
Остальные ответы
Похожие вопросы