【发布时间】:2016-07-14 15:54:47
【问题描述】:
我想在我的网站上创建一个简单的“新闻”小部件,链接到我的 Squarespace 博客的 RSS 提要。
RSS 源可以在这里找到:https://weboxsite.squarespace.com/?format=rss
当我从 CURL 函数加载 XML 数据时,当我 print_r() 我的 XML 文件时,我看不到某些节点。
尤其是我想获取节点属性<media>。
在获取我的<media>节点的属性时,我无法获取url属性。
我已经简化了来自网络的结果,以便于阅读。
<item>
<title>Google Disque : un outil indispensable</title>
<category>Google drive</category>
<dc:creator></dc:creator>
<pubDate>Wed, 22 Jun 2016 21:25:37 +0000</pubDate>
<link>
http://blogue.webox.site/touslesarticles/2016/6/22/google-disque-un-outil-indispensable
</link>
<guid isPermaLink="false">
5769a85b9de4bbf4535c1896:5769a8f1bebafb833a859939:576b01e48419c2d2589b7264
</guid>
<description>
My excerpt....
</description>
<content:encoded>
<![CDATA[
<p>My content....</p>
]]>
</content:encoded>
<media:content type="image/jpeg" url="http://static1.squarespace.com/static/5769a85b9de4bbf4535c1896/5769a8f1bebafb833a859939/576b01e48419c2d2589b7264/1466630737869/1500w/googledisque_bg.jpg" medium="image" isDefault="true" width="510" height="334">
<media:title type="plain">Google Disque : un outil indispensable</media:title>
</media:content>
</item>
** 主要问题**
<media:content type="image/jpeg" url="http://static1.squarespace.com/static/5769a85b9de4bbf4535c1896/5769a8f1bebafb833a859939/576b01e48419c2d2589b7264/1466630737869/1500w/googledisque_bg.jpg" medium="image" isDefault="true" width="510" height="334">
<media:title type="plain">Google Disque : un outil indispensable</media:title>
</media:content>
这是我目前的代码
<?php
$limit = 4;
$c=curl_init('https://weboxsite.squarespace.com/?format=rss');
curl_setopt( $c, CURLOPT_USERAGENT,'nesss' );
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
$r=curl_exec( $c );
curl_close( $c );
$rss = new DOMDocument();
$rss->loadxml($r);
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node) {
$item = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'media' => $node->getElementsByTagName('media')->item(0)->nodeValue,
'cat' => $node->getElementsByTagName('category')->item(0)->nodeValue
);
array_push($feed, $item);
}
for($x = 0; $x < $limit; $x++) {
$title = str_replace(' & ', ' & ', $feed[$x]['title']);
$link = $feed[$x]['link'];
$desc = $feed[$x]['media'];
$cat = $feed[$x]['cat'];
echo '<p><strong><a href="'.$link.'" title="'.$title.'">'.$title.'</a></strong></p>';
echo '<p>'.$cat.'</p>';
}
?>
我知道这样做'media' => $node->getElementsByTagName('media')->item(0)->nodeValue 不是这样做的好方法,因为它试图呈现值。
我试图放置'media'=> $node->getElementsByTagName('media')->item(0)->getAttribute('url'),但我收到了一个错误。
Call to a member function getAttribute() on null in ...
我可能认为这是因为节点被命名为 media:content 并且不仅是媒体,而且事件发生了变化,它无处可去。
我是不是有什么地方遗漏了?
【问题讨论】:
-
您能否说得更具体一些,因为我几乎尝试了我所能做的所有事情?
-
忘记我的最后评论。我的问题是 XML
media和content和dc中使用的 NAMESPACES 存在问题。看这里:php.net/manual/en/domdocument.getelementsbytagnamens.php
标签: php xml rss domdocument