Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Чтение xml файлов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Виталий Хрипунов
Отправлено: 31 Марта, 2017 - 08:58:30
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Здравствуйте!
Перебрал горы инфо. Не могу изъять параметры из xml тега.

Имеется строка:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <enclosure url="image.jpg" length="88327" type="image/jpeg"/>


Вопрос. Как считать параметр url?
 
 Top
Строитель Модератор
Отправлено: 31 Марта, 2017 - 12:25:56
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Виталий Хрипунов Базовое использование SimpleXML
 
 Top
Виталий Хрипунов
Отправлено: 31 Марта, 2017 - 13:52:26
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Строитель
А сам то пробывал извлечь? Скорее всего нет. Вот и не надо посылать.
 
 Top
ytrewq123
Отправлено: 31 Марта, 2017 - 13:53:44
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Я конечно совсем не спец по ХМЛ.
url это атрибут этого тега.
В симпле не скажу как атрибуты добывать. А в DOM метод attributes.
Поэтому. Если не найдёте, штудируйте DOM. Но это сложнее и менее наглядно. (На мой взгляд). Но если надо и есть желание вперёд.
Или кто умнее, что-то подскажет.
Примерно так.
$dom = new DOMDocument();
$dom->load('imja_failaxml.xml');
$dom->getElementsByTagName('enclosure')[0]->attributes; //Nu vozmjom u pervogo. Poluchim Objekt. I ego cherez for posmotretj

(Отредактировано автором: 31 Марта, 2017 - 14:00:43)

 
 Top
Виталий Хрипунов
Отправлено: 31 Марта, 2017 - 13:59:49
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Повторюсь еще раз.
Есть строка без закрывающего тега. Как из нее считать параметры?
CODE (htmlphp):
скопировать код в буфер обмена
  1. <item>
  2.   <guid>https://lenta.ru/news/2017/03/30/korea_russians/</guid>
  3.   <title>Южная Корея отказала во въезде 23 российским «туристам»</title>
  4.   <link>https://lenta.ru/news/2017/03/30/korea_russians/</link>
  5.   <description>
  6.     <![CDATA[Власти Южной Кореи отказали во въезде 23 россиянам из-за того, что реальная цель их поездки не соответствовала заявленной. По данным посольства России в республике, эти граждане предоставили ложную информацию о том, что якобы едут в страну в качестве туристов. Их намерены в скором время отправить на родину.]]>
  7.   </description>
  8.   <pubDate>Thu, 30 Mar 2017 17:39:20 +0300</pubDate>
  9.   <enclosure url="https://icdn.lenta.ru/images/2017/03/30/17/20170330170733523/pic_de7c2e9fd8ffc267e824ff6d359b067f.jpg" length="88327" type="image/jpeg"/>
  10.   <category>Путешествия</category>
  11. </item>

(Отредактировано автором: 31 Марта, 2017 - 14:02:03)

 
 Top
ytrewq123
Отправлено: 31 Марта, 2017 - 14:16:50
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Так ему плевать есть закрывающий или нет. Если в конце есть /> и нет закрывающего, то это и будет концом тега и закрытием его.

$dom = new DOMDocument();
$dom->load('imja_failaxml.xml');
$dom->getElementsByTagName('enclosure')[0]->attributes[0]->value;

Вот так напишите и должно быть усё колосо!
 
 Top
Мелкий Супермодератор
Отправлено: 31 Марта, 2017 - 14:27:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Виталий Хрипунов пишет:
Есть строка без закрывающего тега

Виталий Хрипунов пишет:
<enclosure url="image.jpg" length="88327" type="image/jpeg"/>

Указанный тэг закрыт.

Для simplexml аттрибуты можно прочитать дёрнув метод attributes() необходимого элемента документа.


-----
PostgreSQL DBA
 
 Top
Виталий Хрипунов
Отправлено: 31 Марта, 2017 - 14:33:12
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Мелкий пишет:
Виталий Хрипунов пишет:
Есть строка без закрывающего тега

Виталий Хрипунов пишет:
<enclosure url="image.jpg" length="88327" type="image/jpeg"/>

Указанный тэг закрыт.

Для simplexml аттрибуты можно прочитать дёрнув метод attributes() необходимого элемента документа.


Fatal error: Call to undefined method DOMNodeList::attributes()
И хоть что делай. С ночи сижу все перебираю и ничего.
(Добавление)
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. function RSS_Tags($item)
  3. {
  4. $y = array();
  5. $tnl = $item->getElementsByTagName("title");
  6. $tnl = $tnl->item(0);
  7. $title = $tnl->firstChild->textContent;
  8. $tnl = $item->getElementsByTagName("link");
  9. $tnl = $tnl->item(0);
  10. $link = $tnl->firstChild->textContent;
  11. $tnl = $item->getElementsByTagName("pubDate");
  12. $tnl = $tnl->item(0);
  13. $date = $tnl->firstChild->textContent;        
  14. $tnl = $item->getElementsByTagName("description");
  15. $tnl = $tnl->item(0);
  16. $description = $tnl->firstChild->textContent;
  17. $tnl = $item->getElementsByTagName("enclosure")->attributes()->url;
  18. $tnl = $tnl->item(0);
  19. $enclosure = $tnl;
  20. $y["title"] = $title;
  21. $y["link"] = $link;
  22. $y["date"] = $date;    
  23. $y["description"] = $description;
  24. $y["enclosure"] = $enclosure;
  25. return $y;
  26. }
  27. function RSS_Read($url)
  28. {
  29. $doc  = new DOMDocument();
  30. $doc->load($url);
  31. $items = $doc->getElementsByTagName("item");    
  32. $RSS_Content = array();
  33. foreach($items as $item)
  34.  {
  35.   $y = RSS_Tags($item);   // get description of article, type 1
  36.   array_push($RSS_Content, $y);
  37.   file_put_contents ( 'file.txt', $y, LOCK_EX );
  38.  }
  39. return $RSS_Content;
  40. }
  41. $feeds = RSS_Read("http://lenta.ru/rss/");
  42. foreach ($feeds as $feed)
  43. {
  44.  print_r($feed); // вывод содержимого массива, каждой записи
  45. }
  46. ?>


17 строка работает только так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $tnl = $item->getElementsByTagName("enclosure[url]");

Выводится пустота. Ошибок не выдает.

(Отредактировано автором: 31 Марта, 2017 - 14:37:32)

 
 Top
ytrewq123
Отправлено: 31 Марта, 2017 - 14:44:05
Post Id


Посетитель


Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Ну так правильно, в первом коде вы смешали ДОМ и Симпле.
Пробуйте.
$tnl = $item->getElementsByTagName('enclosure')[0]->attributes[0]->value;
 
 Top
Строитель Модератор
Отправлено: 31 Марта, 2017 - 15:33:28
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




Виталий Хрипунов пишет:
Строитель
А сам то пробывал извлечь? Скорее всего нет. Вот и не надо посылать.
Вы абсолютно правы - подобные задачи я решаю регулярками Закатив глазки
Спойлер (Отобразить)
 
 Top
Виталий Хрипунов
Отправлено: 01 Апреля, 2017 - 00:36:17
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




Строитель пишет:
Виталий Хрипунов пишет:
Строитель
А сам то пробывал извлечь? Скорее всего нет. Вот и не надо посылать.
Вы абсолютно правы - подобные задачи я решаю регулярками Закатив глазки
Спойлер (Отобразить)


Нифига не работает. Неужели нельзя рабочий вариант дать?

Спойлер (Отобразить)
Выдает: ArrayArrayArrayArrayArrayArrayAr rayArrayArray


П.С. Честно говоря, я уже задолбался. Нет у меня времени изучать весь PHP.

(Отредактировано автором: 01 Апреля, 2017 - 00:40:05)

 
 Top
teleoperator27
Отправлено: 01 Апреля, 2017 - 02:10:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 265
Дата рег-ции: Янв. 2017  


Помог: 21 раз(а)




Виталий Хрипунов пишет:
Неужели нельзя рабочий вариант дать?
А должны?
Виталий Хрипунов пишет:
Нет у меня времени изучать весь PHP.
Заплатите денег и спите спокойно, а на форуме что-то требовать это моветон, тут помогают по желанию.

Что вам надо? Распарсить rss что ли? Это тремя строчками решается


PHP:
скопировать код в буфер обмена
  1. $url = 'http://lenta.ru/rss/';
  2. $xml = file_get_contents($url);
  3. $feed= simplexml_load_string($xml);
  4. foreach($feed->channel->item as $item){
  5.         $content = '<b>Линк (guid):</b> '.      $item->guid.'<br>';
  6.         $content .= '<b>Заголовок:</b> '.       $item->title.'<br>';
  7.         $content .= '<b>Еще линк (link):</b> '. $item->link.'<br>';
  8.         $content .= '<b>Категория:</b> '.       $item->category.'<br>';
  9.         $content .= '<b>Дата:</b> '.    $item->pubDate.'<br>';
  10.         $content .= '<div style="width:500px"><b>Краткое содержание</b> '.      $item->description.'</div><br>';
  11.         $content .= '<img src ="'.$item->enclosure['url'].'" width="150" />';
  12.         $content .= '<hr><br>';
  13.         echo $content;
  14. }

(Отредактировано автором: 01 Апреля, 2017 - 02:12:01)

 
My status
 Top
Виталий Хрипунов
Отправлено: 01 Апреля, 2017 - 05:05:16
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Март 2017  


Помог: 0 раз(а)




teleoperator27 пишет:
Виталий Хрипунов пишет:
Неужели нельзя рабочий вариант дать?
А должны?
Виталий Хрипунов пишет:
Нет у меня времени изучать весь PHP.
Заплатите денег и спите спокойно, а на форуме что-то требовать это моветон, тут помогают по желанию.

Что вам надо? Распарсить rss что ли? Это тремя строчками решается


PHP:
скопировать код в буфер обмена
  1. $url = 'http://lenta.ru/rss/';
  2. $xml = file_get_contents($url);
  3. $feed= simplexml_load_string($xml);
  4. foreach($feed->channel->item as $item){
  5.         $content = '<b>Линк (guid):</b> '.      $item->guid.'<br>';
  6.         $content .= '<b>Заголовок:</b> '.       $item->title.'<br>';
  7.         $content .= '<b>Еще линк (link):</b> '. $item->link.'<br>';
  8.         $content .= '<b>Категория:</b> '.       $item->category.'<br>';
  9.         $content .= '<b>Дата:</b> '.    $item->pubDate.'<br>';
  10.         $content .= '<div style="width:500px"><b>Краткое содержание</b> '.      $item->description.'</div><br>';
  11.         $content .= '<img src ="'.$item->enclosure['url'].'" width="150" />';
  12.         $content .= '<hr><br>';
  13.         echo $content;
  14. }


Большое спасибо, но этот вариант не работает с DOM.
Не думал, что и здесь найдутся "барыги", которые за пару строк удавятся. Нахмурился

Тему можно закрывать. Найден более легкий способ. Все ходы записаны
Спасибо всем.
Спойлер (Отобразить)
Добавленные строки 12, 13, 15.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB