我想得到' url'属性来自媒体:内容'使用simplexml的RSS标记。 我在网上搜了好几个小时但却无法上班。 这是代码:
<?php
$rss ='<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<item>
<media:content url="http://blog.com/image1.jpg" width="661" height="310"/>
</item>
</channel>
</rss>';
$xml = simplexml_load_string($rss);
$url = $xml->children('media', true)->content;
var_dump($xml);
var_dump($url); // <- This is object(SimpleXMLElement)[3]
var_dump($url['url']); // <- This is NULL
$ url为NULL。 - &gt;内容返回SimpleXMLElement但它没有任何url属性!
答案 0 :(得分:2)
首先,您必须确保获取正确的content
元素,因此请确保获取内容节点的完整路径(请注意设置$url
变量的额外路径) 。然后有一些奇怪的东西获取命名空间元素的属性(我相信它们自己没有命名空间),要访问它们你必须使用attributes()
方法然后使用['url']
获取元素。您可以尝试添加的选项......
$xml = simplexml_load_string($rss);
$url = $xml->channel->item->children('media', true)->content;
var_dump($xml);
var_dump($url); // <- This is object(SimpleXMLElement)[3]
var_dump($url['url']); // <- This is NULL
var_dump($url->attributes()['url']);
echo "url-".(string)$url->attributes()['url'].PHP_EOL;
最后两行给你......
class SimpleXMLElement#6 (1) {
public ${0} =>
string(26) "http://blog.com/image1.jpg"
}
url-http://blog.com/image1.jpg
(无论如何,echo会将值转换为字符串,但我把它放在以防你尝试赋值并想要值而不是SimpleXMLElement对象的情况下)
答案 1 :(得分:1)
您可以使用SimpleXMLElement xpath例如此表达式来获取media:content元素:
/rss/channel/item/media:content
$xml = simplexml_load_string($rss);
$urls = $xml->xpath('/rss/channel/item/media:content');
// Get url from the first match
echo $urls[0]->attributes()->url;
// Loop all the matches
foreach ($urls as $url) {
echo $url->attributes()->url;
}
或者你可以循环这个项目的孩子:
foreach ($xml->channel->item->children("media", true) as $child) {
echo $child->attributes()->url;
}
答案 2 :(得分:0)
问题在于您忽略了 media 名称空间。
在this link中,您可以找到有关如何使用指定的命名空间来处理标记的更多信息。
在示例中,命名空间被传递给children
成员函数以范围media:content
标记。
$xml = simplexml_load_string($rss);
$url = $xml->children('http://search.yahoo.com/mrss/')->content;
var_dump($xml);
var_dump($url); // <- This is object(SimpleXMLElement)[3]
var_dump($url['url']); // <- This is NULL