2013-07-21 2 views
1

Я пытаюсь сделать rss-ридер/fetcher/parser или все, что вы хотите назвать. Подачу URL является http://www.jutarnji.hr/rssПравильно отображать элементы массива из созданного массива xpath в php

Я сделал функцию PHP, где все работает, за исключением получения изображения из элемента RSS, потому что это очень сложный RSS поток и единственный простой способ был с помощью XPath, который бросает массив и я не знает, чтобы извлечь этот массив с помощью автоматизма внутри цикла Еогеаспа, чтобы показать изображение рядом с каждым пунктом подачи Примечания: это не мой канал RSS, я пытаюсь принести чужой RSS Feed:

function parser($feedURL) { 
$rss = simplexml_load_file($feedURL); 
$rss->registerXPathNamespace('n', 'http://jutarnji.hr/rss'); 

$i = 0; 
foreach ($rss->entry as $feedItem) { 
    $i++; 
    $myDate = ($feedItem->updated); 
    $dateForm = explode(" ", $myDate); 
    if (date("j.n.Y.", strtotime($myDate)) == date("j.n.Y.")) { 
    $niceDate = date("H:i", strtotime($myDate)); 
    } 
    else if (date("j.n.Y.", strtotime($myDate)) == date("j.n.Y.", strtotime("yesterday"))) { 
    $niceDate = "jučer u " . date("H:i", strtotime($myDate)); 
    } 
    else { 
    $niceDate = date("j.n.Y.", strtotime($myDate)) . " u " . date("H:i", strtotime($myDate)); 
    } 
    $feedurl = ($feedItem->link->attributes()->href); 

    $imgUrl = $rss->xpath("//n:link[@rel='enclosure']/@href"); //This throws an array which I cannot extract and use in this foreach loop as well 

    $urltoimage = (string)$imgUrl[0][0][1]; // This was my try to atleast get a specific item but not working 

    echo "<div class='box'> 
     <h3><a target='_blank' href='$feedurl' title='$feedItem->title'>" . $feedItem->title . "</a></h3> 
     <p><img src='$urltomage'/>" . $feedItem->description . "</p> 
     <p class='belowpost'><img src='images/time.png'/>" . $niceDate. "<a class='cont' target='_blank' href='$feedurl' title='$feedItem->title'>Više</a></p></div>"; 
    if($i >= 20) break; 
} } 

проблемы где-то здесь:

$imgUrl = $rss->xpath("//n:link[@rel='enclosure']/@href"); //This throws an array which I cannot extract and use in this foreach loop as well 

    $urltoimage = (string)$imgUrl[0][0][1]; // This was my try to atleast get a specific item but not working 

любая помощь до тех пор, пока существует никаких книг не включены лол Заранее спасибо, это очень важно для меня

+1

Попробуйте сделать var_dump из $ imgUrl как этот 'var_dump ($ imgUrl);'. Вставьте то, что вы получите в своем вопросе. Вероятно, вы обнаружите, что это не массив, а stdObject. – Tom

+0

Вставить var_dump ($ imgUrl); – vodich

+0

Я думаю, что ваша регистрация пространства имен должна быть '$ rss-> registerXPathNamespace ('n', 'http://www.w3.org/2005/Atom');' (смотря на начало фида ' '). Но нужно ли это? Когда я запускаю '// link [@ rel = 'enclosure']/@ href' на http://videlibri.sourceforge.net/cgi-bin/xidelcgi с XPath2.0 и источником XML в качестве ввода, я получаю все URL-адреса, которые вы нацеливаете (пространство имен по умолчанию?). Вы также можете попробовать '// n: link [@ rel = 'enclosure']/@ n: href' –

ответ

0

Там некоторые ошибки, касающиеся этой одной строки.

$imgUrl = $rss->xpath("//n:link[@rel='enclosure']/@href"); 

Предполагая, что вам нравится «получение изображения из rss-объекта». Вы зарегистрировали пространство имен http://jutarnji.hr/rss, но пространство имен для узла связи - http://www.w3.org/2005/Atom.

Вы используете узел документа $rss как контекстный узел для xpath, но вам нужно использовать текущий узел ввода $feedItem. Xpaht начинается с //, который будет искать все узлы ссылок во всем документе, даже если вы используете правильный контекстный узел.

Поэтому: Добавить правильное пространство имен:

$feedItem->registerXPathNamespace('n', 'http://www.w3.org/2005/Atom'); 

И чем использование:

$imgUrl = $feedItem->xpath("n:link[@rel='enclosure']/@href"); 

Или (если ссылка не является прямым потомком):

$imgUrl = $feedItem->xpath(".//n:link[@rel='enclosure']/@href"); 

Чем для получения ссылки с первого номера:

$urltoimage = (string)$imgUrl[0]->href; 
Смежные вопросы