Estoy accediendo a la aplicación gData en YouTube. Usaré this xml como referencia.Elemento SimpleXMLElement, xpath y elementos secundarios
Estoy utilizando xpath en un objeto SimpleXMLElement hijo, pero en lugar de que xpath busque SOLAMENTE el elemento secundario y sus elementos secundarios, parece que aún se está buscando desde la raíz hacia abajo.
tengo el siguiente código:
<?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"));
}
En lugar de la espera:
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&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"
}
}
me sale:
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&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"
...
Así, a pesar de que estoy en el trabajo de un niño elemento del elemento raíz, ¿por qué xpath sigue buscando el elemento padre? Y más importante aún, ¿cómo puedo buscar solo el elemento secundario?
Simplemente "omitir por completo la barra también debería ser el truco". funcionó en mi caso – MingalevME