我尝试阅读我的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>';
答案 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);
}