如何从RSS itunes中读取图像标签

时间:2014-08-29 09:52:19

标签: php xml rss

我尝试阅读我的iTunes RSS。我可以阅读标题,甚至是itunes:字幕,但我的标签图片有问题。

FEED:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

<channel>
<title>title of the podcast</title>  
<itunes:image href="http://www.MyWeb/myImg.png"/>
</channel>
</rss>

PHP:

$xml=("http://www.myWeb/rss.xml");
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

$channel=$xmlDoc->getElementsByTagName('channel')->item(0);

$channel_title = $channel->getElementsByTagName('title')//normal tag
->item(0)->childNodes->item(0)->nodeValue;

$channel_image = $channel->getElementsByTagName('image') //problem
->item(0)->childNodes->item(0)->nodeValue;

echo $channel_title . '<br>';
echo $channel_image . '<br>';

2 个答案:

答案 0 :(得分:3)

您可以使用SimpleXML。由于image元素具有名称空间前缀(itunes),因此您必须使用children方法传递名称空间URL,然后调用attributes方法:

$feed = simplexml_load_file('http://www.myWeb/rss.xml');
foreach ($feed->channel as $channel) {
  $ns_itunes = $channel->children('http://www.itunes.com/dtds/podcast-1.0.dtd');
  echo $ns_itunes->image->attributes();
}

答案 1 :(得分:2)

属性xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"为命名空间定义了别名/前缀itunes。

DOM将其解析为名称空间前缀,因此您可以将图像节点名称读取为:

{http://www.itunes.com/dtds/podcast-1.0.dtd}:image

您目前正在使用标准DOM函数来获取节点。以下是它们的名称空间感知版本(后缀NS)。但更好的解决方案是Xpath。这是DOM扩展的一部分,允许您使用表达式从DOM中获取数据。

为您的DOM创建一个DOMXPath实例,并将标题提取为字符串:

$xpath = new DOMXpath($xmlDoc);

echo $xpath->evaluate('string(/rss/channel/title)'), "\n";

要寻址命名空间中的节点,您需要为其注册自己的前缀。

$xpath = new DOMXpath($xmlDoc);
$xpath->registerNamespace('it', 'http://www.itunes.com/dtds/podcast-1.0.dtd');

echo $xpath->evaluate('string(/rss/channel/it:image/@href)');

这里可以有几个项目来获取并迭代它们,使用返回的节点作为evaluate中的上下文参数来获取详细信息。

foreach ($xpath->evaluate('/rss/channel/item') as $item) {
  echo $xpath->evaluate('string(enclosure/@url)', $item);
}