从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
替代方案:寻找namespace
和simplexml
。
答
请在php.net上查看simplexml
或DOMDocument
。
这些提供了解析XML数据的函数。 <media:content>
中的url称为属性,上述函数也提供了拉取属性的方法。
我建议你尝试一下我提供的信息,并在需要帮助时返回到SO,好吗?
玩得开心!
答
是的,你可以使用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;
是啊,我不知道这些东西的名字在谷歌搜索,但我张贴了这个问题后,我一直在寻找,我发现一些东西在stackoverflow,好吧@michi,我会评论如果我需要帮助。非常感谢您的时间。 – naveencgr8 2013-04-10 16:03:05
嗨,现在我知道如何抓取数据,但仍然无法做任何与多值属性,echo $ xml-> channel-> item-> title; - 这工作正常,但回声$ xml-> channel-> item-> media:content;这不.. .. – naveencgr8 2013-04-10 16:38:14
@ naveencgr8看到我的新答案! – michi 2013-04-10 21:39:49