Помогите разобрать XML с DOMDocument - PullRequest
6 голосов
/ 04 февраля 2011

Я пытаюсь проанализировать поле плейлиста YouTube.

URL-адрес: http://gdata.youtube.com/feeds/api/playlists/664AA68C6E6BA19B?v=2

Мне нужны: заголовок, идентификатор видео и миниатюра по умолчанию.

Я легко могу получить заголовок, но я немного растерялся, когда дело доходит до вложенных элементов

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

Мне нужны "videoid" и "url" из thumbnail-default

Спасибо!

1 Ответ

8 голосов
/ 04 февраля 2011

Аналогично 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.

...