使用SimpleXML PHP访问XML中的名称空间冒号节点 [英] Accessing namespace colon nodes in XML with SimpleXML PHP

查看:58
本文介绍了使用SimpleXML PHP访问XML中的名称空间冒号节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这与我发布的问题类似,但是我已经拓宽了范围,因为它必须可以解决.

This is similar to a question I've posted, but I've broadened out as this has got to be solvable.

我正在尝试从此rss提要中访问分级和viewCount.现在,这些文件使用yt:和gd:命名空间-但是,命名空间引用是来自YouTube提要的404引用,因此似乎失败了.请帮忙吗?

I am trying to access rating and viewCount from this rss feed. Now, these are namespaced with yt: and gd: - however the namespace references are 404's from youtube's feed so it seems to be failing. Any help please, please?

我正在尝试使用:-

$ytFeed->children('http://gdata.youtube.com/schemas/2007')->statistics->attributes('viewCount'));

但是失败了...它的工作正常,例如,我可以使用

But it fails... It does work like that normally, for instance I CAN access media: with

$ytFeed->children('http://search.yahoo.com/mrss/')->group->category);

这是原始的RSS,请在这些节点的底部查看:-

This is the original RSS, look at the bottom for these nodes:-

<?xml version='1.0' encoding='UTF-8'?>
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:yt='http://gdata.youtube.com/schemas/2007'>
    <id>http://gdata.youtube.com/feeds/api/videos/tDJFDsZFw2E</id>
    <published>2009-03-02T07:02:49.000Z</published>
    <updated>2011-07-19T06:57:29.000Z</updated>
    <category scheme='http://schemas.google.com/g/2005#kind' term='http://gdata.youtube.com/schemas/2007#video' />
    <category scheme='http://gdata.youtube.com/schemas/2007/categories.cat' term='Music' label='Music' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='Other Lives' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='Jesse Tabish' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='Jenny Hsu' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='Jupiter Hotel' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='Portland' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='music' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='band' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='interview' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='mf magazine' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='fashion' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='hotel room' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='doug fir lounge' />
    <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='erik schultz' />
    <title type='text'>Other Lives</title>
    <content type='text'>We sat down with Jesse Tabish and Jenny Hsu from Other Lives at the Jupiter Hotel in Portland, OR. We love these guys. Check them out at myspace.com/otherlivesVisit mf magazine at musicfashionmagazine.com or myspace.com/musicfashion</content>
    <link rel='alternate' type='text/html' href='http://www.youtube.com/watch?v=tDJFDsZFw2E&amp;feature=youtube_gdata' />
    <link rel='http://gdata.youtube.com/schemas/2007#video.responses' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/tDJFDsZFw2E/responses' />
    <link rel='http://gdata.youtube.com/schemas/2007#video.related' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/tDJFDsZFw2E/related' />
    <link rel='self' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/tDJFDsZFw2E' />
    <author>
        <name>mfmagazine</name>
        <uri>http://gdata.youtube.com/feeds/api/users/mfmagazine</uri>
        </author>
    <gd:comments>
        <gd:feedLink href='http://gdata.youtube.com/feeds/api/videos/tDJFDsZFw2E/comments' countHint='16' />
        </gd:comments>
    <media:group>
        <media:category label='Music' scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>Music</media:category>
        <media:content url='http://www.youtube.com/v/tDJFDsZFw2E?f=videos&amp;app=youtube_gdata' type='application/x-shockwave-flash' medium='video' isDefault='true' expression='full' duration='600' yt:format='5' />
        <media:content url='rtsp://v3.cache3.c.youtube.com/CiILENy73wIaGQlhw0XGDkUytBMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='600' yt:format='1' />
        <media:content url='rtsp://v6.cache3.c.youtube.com/CiILENy73wIaGQlhw0XGDkUytBMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='600' yt:format='6' />
        <media:description type='plain'>We sat down with Jesse Tabish and Jenny Hsu from Other Lives at the Jupiter Hotel in Portland, OR. We love these guys. Check them out at myspace.com/otherlivesVisit mf magazine at musicfashionmagazine.com or myspace.com/musicfashion</media:description>
        <media:keywords>Other Lives, Jesse Tabish, Jenny Hsu, Jupiter Hotel, Portland, music, band, interview, mf magazine, fashion, hotel room, doug fir lounge, erik schultz</media:keywords>
        <media:player url='http://www.youtube.com/watch?v=tDJFDsZFw2E&amp;feature=youtube_gdata_player' />
        <media:thumbnail url='http://i.ytimg.com/vi/tDJFDsZFw2E/0.jpg' height='240' width='320' time='00:05:00' />
        <media:thumbnail url='http://i.ytimg.com/vi/tDJFDsZFw2E/1.jpg' height='90' width='120' time='00:02:30' />
        <media:thumbnail url='http://i.ytimg.com/vi/tDJFDsZFw2E/2.jpg' height='90' width='120' time='00:05:00' />
        <media:thumbnail url='http://i.ytimg.com/vi/tDJFDsZFw2E/3.jpg' height='90' width='120' time='00:07:30' />
        <media:title type='plain'>Other Lives</media:title>
        <yt:duration seconds='600' />
        </media:group>
    <gd:rating average='5.0' max='5' min='1' numRaters='17' rel='http://schemas.google.com/g/2005#overall' />
    <yt:statistics favoriteCount='10' viewCount='3572' />
    </entry>

推荐答案

使用 DomDocument DomXpath :

error_reporting(E_ALL ^ E_STRICT);
ini_set('display_errors', 'on');

$dom = new DomDocument;
$dom->load('data.xml');

$xpath = new DomXpath($dom);
$xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
$xpath->registerNamespace('media', 'http://search.yahoo.com/mrss/');
$xpath->registerNamespace('gd', 'http://schemas.google.com/g/2005');
$xpath->registerNamespace('yt', 'http://gdata.youtube.com/schemas/2007');

$favoriteCountAttr = $xpath->query('/atom:entry/yt:statistics/@favoriteCount')->item(0);
if ($favoriteCountAttr instanceof DomAttr) {
    echo $favoriteCountAttr->nodeValue; // output: 10
}

这篇关于使用SimpleXML PHP访问XML中的名称空间冒号节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆