使用PHP解析RSS Feed XML时无法获取itunes:image属性如何解决
PHP解析RSS Feed无法获取itunes:image值的解决方案
itunes:image为自闭合XML标签,本身没有文本内容,你需要的图片地址存储在该标签的href属性中,而非标签文本值,因此直接读取节点内容只会返回空值。你之前尝试的$item->children('itunes:image')写法也不符合API规范,children()方法的第一个参数是命名空间前缀/URI,不能传入节点名称。
正确实现逻辑
- 先获取itunes命名空间下的子节点集合
- 从子节点集合中取出image节点,调用
attributes()方法读取href属性值 - 建议将读取结果强转为string类型,避免后续操作拿到SimpleXMLElement对象报错
修正后完整代码
foreach ($xml->channel->item as $item) { // 提前提取itunes命名空间下的子节点,避免重复调用 $itunesNode = $item->children('itunes', true); // 读取image节点的href属性 $imageUrl = (string)$itunesNode->image->attributes()->href; echo("\n\t<itunes:duration>" . $itunesNode->duration ."</itunes:duration> \n\t<itunes:image href=\"" . htmlspecialchars($imageUrl) . "\"/> \n\t<itunes:episode>" . $itunesNode->episode ."</itunes:episode> \n\t<itunes:episodeType>" . $itunesNode->episodeType ."</itunes:episodeType> </item>"); }
注意:如果要输出合法的XML结构,itunes:image标签需要保持自闭合格式,同时用
htmlspecialchars()处理属性值可以避免URL中存在特殊字符导致XML格式错误。
内容的提问来源于stack exchange,提问作者Arnie C
相关产品推荐
相关产品推荐

