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
Форумы портала PHP.SU :: Версия для печати :: Чтение xml файлов
Форумы портала PHP.SU » » Вопросы новичков » Чтение xml файлов

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

1. Виталий Хрипунов - 31 Марта, 2017 - 08:58:30 - перейти к сообщению
Здравствуйте!
Перебрал горы инфо. Не могу изъять параметры из xml тега.

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


Вопрос. Как считать параметр url?
2. Строитель - 31 Марта, 2017 - 12:25:56 - перейти к сообщению
Виталий Хрипунов Базовое использование SimpleXML
3. Виталий Хрипунов - 31 Марта, 2017 - 13:52:26 - перейти к сообщению
Строитель
А сам то пробывал извлечь? Скорее всего нет. Вот и не надо посылать.
4. ytrewq123 - 31 Марта, 2017 - 13:53:44 - перейти к сообщению
Я конечно совсем не спец по ХМЛ.
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
5. Виталий Хрипунов - 31 Марта, 2017 - 13:59:49 - перейти к сообщению
Повторюсь еще раз.
Есть строка без закрывающего тега. Как из нее считать параметры?
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>
6. ytrewq123 - 31 Марта, 2017 - 14:16:50 - перейти к сообщению
Так ему плевать есть закрывающий или нет. Если в конце есть /> и нет закрывающего, то это и будет концом тега и закрытием его.

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

Вот так напишите и должно быть усё колосо!
7. Мелкий - 31 Марта, 2017 - 14:27:36 - перейти к сообщению
Виталий Хрипунов пишет:
Есть строка без закрывающего тега

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

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

Для simplexml аттрибуты можно прочитать дёрнув метод attributes() необходимого элемента документа.
8. Виталий Хрипунов - 31 Марта, 2017 - 14:33:12 - перейти к сообщению
Мелкий пишет:
Виталий Хрипунов пишет:
Есть строка без закрывающего тега

Виталий Хрипунов пишет:
<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]");

Выводится пустота. Ошибок не выдает.
9. ytrewq123 - 31 Марта, 2017 - 14:44:05 - перейти к сообщению
Ну так правильно, в первом коде вы смешали ДОМ и Симпле.
Пробуйте.
$tnl = $item->getElementsByTagName('enclosure')[0]->attributes[0]->value;
10. Строитель - 31 Марта, 2017 - 15:33:28 - перейти к сообщению
Виталий Хрипунов пишет:
Строитель
А сам то пробывал извлечь? Скорее всего нет. Вот и не надо посылать.
Вы абсолютно правы - подобные задачи я решаю регулярками Закатив глазки
Спойлер (Отобразить)
11. Виталий Хрипунов - 01 Апреля, 2017 - 00:36:17 - перейти к сообщению
Строитель пишет:
Виталий Хрипунов пишет:
Строитель
А сам то пробывал извлечь? Скорее всего нет. Вот и не надо посылать.
Вы абсолютно правы - подобные задачи я решаю регулярками Закатив глазки
Спойлер (Отобразить)


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

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


П.С. Честно говоря, я уже задолбался. Нет у меня времени изучать весь PHP.
12. teleoperator27 - 01 Апреля, 2017 - 02:10:55 - перейти к сообщению
Виталий Хрипунов пишет:
Неужели нельзя рабочий вариант дать?
А должны?
Виталий Хрипунов пишет:
Нет у меня времени изучать весь 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. }
13. Виталий Хрипунов - 01 Апреля, 2017 - 05:05:16 - перейти к сообщению
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.

 

Powered by ExBB FM 1.0 RC1