从XML获取和存储数据

问题描述:

我试图从一个输出XML结构数据的API中获取数据。从XML获取和存储数据

它有很多分支,看起来很复杂。这里是结构,

<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0"> 
<channel> 
<item> 
<title>Test Video</title> 
<media:content url="http://localhost/video/test.mp4" type="video/x-flv" duration="6474"/> 
</item> 
</channel> 
</rss> 

我也想知道,如果它有多个分支,如视频说明,类型..我怎么能抓住他们?而在媒体标签里面它有多个值,我怎样才能分别得到它们呢?例如:如何获得内容网址里面媒体标签

我意识到人们在你的XML(1号线)命名空间,这将这样的伎俩:

$xml = simplexml_load_string($x); // assuming your XML in $x 
$contents = $xml->xpath("//media:content"); 

foreach ($contents as $content) echo $content['url'],"<br />"; 

见现场演示:http://codepad.viper-7.com/7bJf9Q

替代方案:寻找namespacesimplexml

请在php.net上查看simplexmlDOMDocument
这些提供了解析XML数据的函数。
<media:content>中的url称为属性,上述函数也提供了拉取属性的方法。

我建议你尝试一下我提供的信息,并在需要帮助时返回到SO,好吗?

玩得开心!

+0

是啊,我不知道这些东西的名字在谷歌搜索,但我张贴了这个问题后,我一直在寻找,我发现一些东西在*,好吧@michi,我会评论如果我需要帮助。非常感谢您的时间。 – naveencgr8 2013-04-10 16:03:05

+0

嗨,现在我知道如何抓取数据,但仍然无法做任何与多值属性,echo $ xml-> channel-> item-> title; - 这工作正常,但回声$ xml-> channel-> item-> media:content;这不.. .. – naveencgr8 2013-04-10 16:38:14

+0

@ naveencgr8看到我的新答案! – michi 2013-04-10 21:39:49

是的,你可以使用SimpleXMl。 <media:content>引用一个名称空间(http://search.yahoo.com/mrss/)。所以,你可以使用:

$string = <<<XML 
<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0"> 
<channel> 
<item> 
<title>Test Video</title> 
<media:content url="http://localhost/video/test.mp4" type="video/x-flv" duration="6474"/> 
</item> 
</channel> 
</rss> 
XML; 

$xml = simplexml_load_string($string); 

//var_dump($xml); 
echo $xml->channel->item->title; 
$contentAttr = $xml->channel->item->children('media', true)->content->attributes(); 
echo $contentAttr['url']; 

exit; 

还采取一看Using SimpleXML to read RSS feed