从XML中抓取并存储数据

时间:2013-04-10 15:46:58

标签: php xml

我正在尝试从以XML结构输出数据的API中获取数据。

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

<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>

我还想知道如果它有更多的分支,例如视频描述,类型......我怎么能抓住它们?在媒体内部标签中它有多个值,我该如何单独获取它们?示例:如何在媒体标记中获取内容网址

3 个答案:

答案 0 :(得分:2)

我意识到你的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

答案 1 :(得分:1)

是的,您可以使用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

答案 2 :(得分:0)

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

我建议您尝试使用我已经提供的信息,如果您需要帮助,请返回SO,好吗?

玩得开心!