【问题标题】:Help parsing XML with DOMDocument使用 DOMDocument 帮助解析 XML
【发布时间】:2011-06-21 14:21:17
【问题描述】:

我正在尝试解析一个 youtube 播放列表字段。

网址是:http://gdata.youtube.com/feeds/api/playlists/664AA68C6E6BA19B?v=2

我需要:标题、视频 ID 和默认缩略图。

我可以很容易地得到标题,但是当涉及到嵌套元素时我有点迷茫

        $data = new DOMDocument();
        if($data->load("http://gdata.youtube.com/feeds/api/playlists/664AA68C6E6BA19B?v=2"))
        {       
            foreach ($data->getElementsByTagName('entry') as $video)
            {
                $title = $video->getElementsByTagName('title')->item(0)->nodeValue;
                $id    = ??
                $thumb = ??                 
            }
        }

这是 XML(我已经删除了与此示例无关的元素)

<entry gd:etag="W/&quot;AkYGSXc9cSp7ImA9Wx9VGEk.&quot;">    
    <title>A GoPro Weekend On The Ice</title>

    <media:group>
        <media:thumbnail url="http://i.ytimg.com/vi/yk6wkfVNFQE/default.jpg" height="90" width="120" time="00:02:07" yt:name="default" />          
        <yt:videoid>yk6wkfVNFQE</yt:videoid>
    </media:group>

</entry>

我需要来自 thumbnail-default 的“videoid”和“url”

谢谢!

【问题讨论】:

    标签: php xml domdocument xml-namespaces


    【解决方案1】:

    类似于您已经在使用的getElementsByTagName(),要访问命名空间元素(namespace:element-name 可识别),您可以使用getElementsByTagNameNS() 方法。

    文档(上面链接)应该为您提供有关如何使用它的技术知识,只要说它类似于以下内容(也使用getAttribute())。

    $yt    = 'http://gdata.youtube.com/schemas/2007';
    $media = 'http://search.yahoo.com/mrss/';
    
    // Inside your loop
    $id    = $video->getElementsByTagNameNS($yt, 'videoid')->item(0)->nodeValue;
    $thumb = $video->getElementsByTagNameNS($media, 'thumbnail')->item(0)->getAttribute('url');
    

    希望这会给你一个跳板,让你在你的 XML 文档中访问命名空间项。

    【讨论】:

    • 嗨,你为什么要把 $media 分配给 search.yahoo.com.mrss??
    • @nuttynibbles 1. 这样可以重复使用 URL。 2. 因为 SO 有一个狭窄的代码框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多