2012-03-12 13 views
5

YouTubeのgData APIにアクセスしています。私は参考としてthis xmlを使用します。SimpleXMLElement、xpath、およびサブ要素

私は子供のSimpleXMLElementオブジェクトでxpathを使用していますが、子要素とその子だけを検索するxpathではなく、まだルートから検索しているようです。

私は次のコードを持っている:私は取得

string(666) "<entry> 
       <id>http://gdata.youtube.com/feeds/api/playlists/58FD3A7244B64B99/PLlwIr0olq0UxVV_ouqclCE0xRZvs2Lytl</id> 
       <title type="text">Zero Punctuation on The Escapist</title> 
       <content type="text">Zero Punctuation picks apart the games so you don't have to. View new episodes every Wednesday only 
at http://www.escapistmagazine.com</content> 
       <link rel="alternate" type="text/html" href="http://www.youtube.com/watch?v=7EpzwuZOvKY&amp;feature=youtube_gdata"/> 
       <author> 
         <name>theescapistmagazine</name> 
         <uri>http://gdata.youtube.com/feeds/api/users/theescapistmagazine</uri> 
       </author> 
       <yt:statistics favoriteCount="256" viewCount="188598"/> 
     </entry>" 
object(SimpleXMLElement)#5 (1) { 
    ["@attributes"]=> 
    array(2) { 
    ["favoriteCount"]=> 
    string(3) "256" 
    ["viewCount"]=> 
    string(6) "188598" 
    } 
} 

::だから

string(666) "<entry> 
       <id>http://gdata.youtube.com/feeds/api/playlists/58FD3A7244B64B99/PLlwIr0olq0UxVV_ouqclCE0xRZvs2Lytl</id> 
       <title type="text">Zero Punctuation on The Escapist</title> 
       <content type="text">Zero Punctuation picks apart the games so you don't have to. View new episodes every Wednesday only 
at http://www.escapistmagazine.com</content> 
       <link rel="alternate" type="text/html" href="http://www.youtube.com/watch?v=7EpzwuZOvKY&amp;feature=youtube_gdata"/> 
       <author> 
         <name>theescapistmagazine</name> 
         <uri>http://gdata.youtube.com/feeds/api/users/theescapistmagazine</uri> 
       </author> 
       <yt:statistics favoriteCount="256" viewCount="188598"/> 
     </entry>" 
array(25) { 
    [0]=> 
    object(SimpleXMLElement)#5 (1) { 
    ["@attributes"]=> 
    array(2) { 
     ["favoriteCount"]=> 
     string(3) "256" 
     ["viewCount"]=> 
     string(6) "188598" 
    } 
    } 
    [1]=> 
    object(SimpleXMLElement)#6 (1) { 
    ["@attributes"]=> 
    array(2) { 
     ["favoriteCount"]=> 
     string(4) "4787" 
     ["viewCount"]=> 
     string(7) "1276435" 
    } 
    } 
    [2]=> 
    object(SimpleXMLElement)#7 (1) { 
    ["@attributes"]=> 
    array(2) { 
     ["favoriteCount"]=> 
     string(4) "7628" 
     ["viewCount"]=> 
     string(7) "1702845" 
... 

、私が子供の仕事だにもかかわらず、むしろ予想より

<?php 

date_default_timezone_set('Australia/Sydney'); 
$url = "http://gdata.youtube.com/feeds/api/playlists/58FD3A7244B64B99?prettyprint=true&alt=atom&v2=1&fields=title,subtitle,logo,entry%28link%[email protected]=%27alternate%27%5D,id,title,content,author,yt:statistics%29"; 

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
$rawResponse = curl_exec($curl); 

$xmlData = simplexml_load_string($rawResponse); 
$xmlData->registerXPathNamespace('yt', 'http://gdata.youtube.com/schemas/2007'); 

foreach($xmlData->entry as $entry) { 
    var_dump($entry->asXml()); 
    myFunction($entry); die(); 
} 

function myFunction(SimpleXMLElement $xml) 
{ 
    var_dump($xml->xpath("//yt:statistics")); 
} 

を要素がルート要素の場合、xpathはまだ親要素を検索していますか?さらに重要なのは、子要素だけを検索するにはどうすればいいですか?

答えて

5

バックアップ時に式から//を削除してから、式をドキュメント全体に適用する必要があります。あなたが探しているのは、単一のスラッシュ/です。このスラッシュは、指定されたドキュメントフラグメントのルートから始まります。

これはすべきことです。 :)

編集:スラッシュを完全に省略すると、そのトリックも行う必要があります。

+1

ちょうど「スラッシュを完全に省略すると、トリックもやってください」。私の場合はうまくいった。 – MingalevME

関連する問題